home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 6
/
Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso
/
033a
/
pb_116.arj
/
PROBOARD.DOC
< prev
next >
Wrap
Text File
|
1991-09-30
|
223KB
|
6,794 lines
██████ ██████ ███
██ ██ ██ ██ ██
██ ██ ██ ███ ████ ██ ██ ████ ████ ██ ███ ██
█████ ███ ██ ██ ██ █████ ██ ██ ██ ███ ██ █████
██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██ ██ ██ ██
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
████ ████ ████ ██████ ████ ██████ ████ ██████
Version 1.16
30-Sep-1991
Copyright (c) 1990,1991 Philippe Leybaert - All rights reserved
──────────────────────────────────────────────────────────────────
The following names/products mentioned in this documentation are
copyrighted material, trademarks or registered trademarks:
Bimodem Erik Labs
DESQview Quarterdeck Office Systems
DoorWay Marshall Dudley
FidoNet Tom Jennings
IBM PC/XT/AT International Business Machines, Inc
MBUTIL Gerard van der Land
MS-DOS , Microsoft C Microsoft, Inc
Multi-Edit American Cybernetics, Inc
Opus Wynn Wagner III
QuickBBS & QEcho The QuickBBS Group, Inc
QuickEd Tirosh Bros.
RemoteAccess (RA) Continental Software, Inc
TLIB Burton Systems Software
TosScan & FrontDoor Joaquim H. Homrighausen
Turbo Assembler/Debugger Borland International, Inc
Borland C++, Turbo C++ Borland International, Inc
X00 Ray Gwinn
ZmailQ Claude N. Warren
Zortech C++, BLink Zortech, Inc
──────────────────────────────────────────────────────────────────
- 1 -
┌──────────┐
│ CONTENTS │
└──────────┘
I. Introduction ................................. 4
- Description .............................. 4
- Support .................................. 5
- Technical Info ........................... 6
- Credits .................................. 7
II. Registration ................................. 8
III. Installation ................................. 11
IV. Configuration ................................ 14
- System parameters ........................ 14
- Protocols ................................ 18
- Message areas ............................ 22
- File areas ............................... 23
- Time/download limits ..................... 25
- Modem parameters ......................... 25
- Events ................................... 28
- Personal Files ........................... 29
V. Security ..................................... 30
- Levels & Flags ........................... 30
- Trashcan ................................. 30
VI. Menus ........................................ 31
- Setting up menus ......................... 31
- Menu Security ............................ 32
- Creating menus ........................... 33
- Hints .................................... 35
- Menu function overview ................... 35
VII. Users ........................................ 62
- User editor .............................. 62
- Loglevels ................................ 64
VIII. Echomail & Netmail ........................... 66
- Echomail ................................. 66
- Netmail .................................. 66
- 2 -
IX. PBUtil ....................................... 68
- Message packer ........................... 69
- Message indexer .......................... 69
- Message killer ........................... 69
- Messagebase repair ....................... 69
- Message linker ........................... 70
- Userfile packer .......................... 70
- Userfile indexer ......................... 70
- Userfile sorter .......................... 70
- User killer .............................. 71
- File counters ............................ 72
- Nodelist compiler ........................ 72
- LASTREAD converter ....................... 74
X. Reference .................................... 75
- Multi-user operation ..................... 75
- Sysop keys ............................... 76
- Command line options & errorlevels ....... 78
- Hard-coded ANS/ASC files ................. 80
- ANS/ASC control codes .................... 82
- Music Files .............................. 85
- Text Macros .............................. 85
- Example batch files ...................... 88
XI. Software Development Kit...................... 91
- Requirements.............................. 91
- Creating ProBoard Executables............. 92
- Compiling and linking..................... 93
- Restrictions.............................. 93
- Library functions supported............... 95
- ProBoard interface functions.............. 97
- Global ProBoard variables................. 113
- Special-purpose PEX-files................. 116
XII. RemoteAccess to ProBoard conversion........... 118
- 3 -
┌─────────────────┐
│ I. INTRODUCTION │
└─────────────────┘
Description
──────────────────────────────────────────────────────────────────
ProBoard is a program to run a public or private BBS. A BBS
is a Bulletin Board, where files, messages and other useful
things may be exchanged between users. The operator of a BBS
is called System Operator, in short SysOp. He/she is
responsible for the correct functioning of the BBS. Therefore,
this manual is primarily intended for sysops, or future
sysops.
ProBoard has everything a BBS program must have to efficiently run
a BBS. It's even possible to use ProBoard within a mail network.
Furthermore, more than one user at a time can use a BBS running
ProBoard, by making use of a network or multitasker.
The greatest asset of ProBoard is that it has most of the features
(and MORE!) of QuickBBS and Remote Access, yet needs a small
amount of memory and disk storage space to run (<256K). You could
run three copies of ProBoard on just one P under Desqview. On
a 80386 computer with 2MB of RAM, you could run 4 nodes, and
still have a 600K DOS window at your disposal! When running an
external program, ProBoard can swap itself to disk/EMS, and stay
resident in only 2000 bytes !!! The most important feature is
undoubtedly the ability to extend ProBoard by writing your own
extensions in C or C++.
All messages are stored in a single, QuickBBS-compatible message-
base. So all QuickBBS message-base utilities will work with
ProBoard. The only QuickBBS file not supported by ProBoard is the
LASTREAD.BBS file, but a utility to extract and store the
LASTREAD.BBS file from/in the userfile is included. The
EXITINFO.BBS is also supported.
- 4 -
This is a list of the most important features not found in other
BBS software like Remote Access:
- A software development kit! Write your own extensions to
ProBoard using C or C++. You can write "internal doors", and a
lot more!! THIS IS UNIQUE!!
- Swaps itself to disk or EMS , leaving only 2 (two) Kb resident!
- Extremely flexible protection against excessive downloaders.
- REAL-TIME multi-line chat built in. No stupid line-per-line chat.
- Advanced CD-ROM support. The CD-ROM drive is not accessed
until a file is actually downloaded.
- VERY flexible protocol configuration. You can install all
protocols directly in ProBoard, including Zmodem,Xmodem,Puma,
Lynx, Bimodem (FULL support!),...
- Files can be downloaded from all areas at once, a single area
or from ANY combination of areas.
- You can set download-limits per file area (# files & # Kb)
- More control over the control codes in textfiles: left/right
aligned, fixed field length,...
- Hotkeys or command stacking or a combination of these two.
- Sysop macros: you can assign keystrokes to function keys!
- IBM-specific characters can be filtered out for certain users.
- European or American date format.
- Personal files: users can exchange private files!
- Expiration dates. Let ProBoard lower a user's level at a given
date.
- Advanced support for extended text modes (132 columns)
- Online help for all sysop-keys and macros.
- Extremely user-friendly configuration/maintenance.
Support
──────────────────────────────────────────────────────────────────
For problems, bug-reports, etc. please write to:
Rutger Lasuy or Philippe Leybaert
Krakeelstraat 5 1079 Ramsdell Drive
B-9260 Serskamp Apple Valley, MN 55124
BELGIUM USA
You can also fax to the following number: +32-91-444-938
If you like, you can reach me on FidoNet (2:292/1900) or on
CompuServe (70314,2021).
We can only offer limited support to non-registered users.
- 5 -
You can also call the support BBS for questions, the latest
version and utilities for ProBoard:
- ProBoard Benelux (Fido 2:292/1900)
Sysop: Marc Van Loocke
Hours: 24/24
Speed: 300-2400 MNP
Tel : +32-91-20.25.31
To get the latest version, you can call:
- Computron BBS
Sysop: Alain Luckx
Hours: 24/24
Speed: 300-2400 v42bis MNP/LAP-M
Tel : +32-91-72.58.56 (8 lines)
- Travel Info Net (Fido 1:244/201)
Sysop: Peter J. Ptok
Hours: 24/24
Speed: 300-9600 HST/MNP
Tel : +1-519-428-9287
- Milling A-Round
Sysop: Mike Wagner
Hours: 24/24
Speed: 300-2400
Tel : +1-612-944-5091
It should also be available on CompuServe (IBMBBS forum).
Technical Info
──────────────────────────────────────────────────────────────────
ProBoard is entirely written in C++ and Assembler. No third-party
libraries are used, so we have TOTAL control over the code!
For the development of ProBoard, we used the following tools:
Compiler......... Zortech C++ v3.0
Linker........... BLink, part of Zortech C++ v3.0
Assembler........ Turbo Assembler v2.5
Debugger......... Zortech Debugger v3.0
Editor........... Multi-Edit Professional 5.01
Version Control.. TLIB v4.12f
- 6 -
Credits
──────────────────────────────────────────────────────────────────
ProBoard and all the included utilities are written by:
Philippe Leybaert and Rutger Lasuy
Documentation:
Original text : Rutger Lasuy
Final editing : Philippe Leybaert
English Translation : Luk Vermeulen
Beta-testing:
Marc Van Loocke - ProBoard Support Benelux
Alain Luckx - Computron BBS
Eddy Impens - F-Three BBS
Mike Wagner - Milling A-Round
Sysops who are interested in testing pre-releases (alpha & beta
versions), please contact me.
- 7 -
┌──────────────────┐
│ II. REGISTRATION │
└──────────────────┘
ProBoard is SHAREWARE. This means that you are granted a 30-day
evaluation period, after which you must register. You will receive
a disk (3.5" or 5.25") with the latest version of ProBoard and a
registration file. This file is valid for all future versions of
ProBoard up to 2.00.
Registration fees for non-commercial use are as follows:
Registration Registration + Manual
------------ ---------------------
USA................. 40 US$ 60 US$
Canada.............. 50 CAN$ 75 CAN$
Belgium............. 1500 BF 2500 BF
The Netherlands..... 85 FL 135 FL
UK.................. 25 BP 40 BP
Germany............. 75 DM 120 DM
France.............. 275 FF 425 FF
When used in a commercial environment, multiply the
registration-only prices by 5. Commercial registrations include
the printed & bound manual and free support by fax.
To register, fill out the registration form on the next page,
print it, and send it together with your payment (check or
money order) to the following address:
In the US:
ProBoard USA - Karen Charland
1079 Ramsdell Drive
Apple Valley, MN 55124
USA
[ Make checks payable to Karen Charland ]
- 8 -
In Canada:
ProBoard Canada - Peter J. Ptok
R.R 1
Simcoe, Ontario
Canada N3Y-4J9
[ Make checks payable to Peter J. Ptok ]
VISA/MC registration: 1-519-428-1170 Voice
1-519-428-9287 Data
In Europe:
ProBoard Europe - Rutger Lasuy
Krakeelstraat 5
B-9260 Serskamp
BELGIUM
- 9 -
------------------------------------------------------------------
ProBoard version 1.16 ---- Registration Form
------------------------------------------------------------------
Your Name : _____________________________________________
Company : _____________________________________________
Sysop Name : _____________________________________________
BBS name : _____________________________________________
Diskette-size: ( ) - 5"1/4 ( ) - 3"1/2 (check one)
Address : _____________________________________________
_____________________________________________
_____________________________________________
Primary BBS phone number : __________________________________
Hours of operation : __________________________________
Is your system part of FidoNet? ( ) - Yes ( ) - No
If so, what is your network address? _______________________
Type of registration: ( ) - Personal ( ) - Commercial
Registration amount enclosed: _______________________________
What would you like to see (changed) in future versions of
ProBoard?
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
- 10 -
┌───────────────────┐
│ III. INSTALLATION │
└───────────────────┘
If you are already operating a Remote Access BBS system, refer to
chapters XI and XII on how to convert your system to ProBoard.
The system-requirements for ProBoard are:
- DOS v3.10 or higher
- 256K of free system memory
- A FOSSIL driver (eg. X00)
A FOSSIL driver can be obtained from many BBS's (including from
the ProBoard Support BBS).
The following guide-lines are intended for a single-user system.
Please refer to the appropriate chapter on how to install a
multi-user system.
ProBoard is distributed in a compressed file (PB_xxx.ZIP). Make
a subdirectory for ProBoard to be installed in, eg. C:\PB
Unzip PB_xxx.ZIP in C:\PB in order to obtain the following files:
PROBOARD.EXE ProBoard executable
PB.EXE Standalone control program
PROCFG.EXE ProBoard configuration program
PBUTIL.EXE Maintenance utility
PROBOARD.DOC This file
P.BAT Basic batch file
EX_MENUS.ZIP Example menus
EX_TXT.ZIP Example ANS/ASC files
EX_CFG.ZIP Example configuration files
CONVERT.EXE Conversion utility
SDK.ZIP ProBoard Software Development Kit (PEX)
- 11 -
Now make a subdirectory for the menus (C:\PB\MENUS). You will
also need a subdirectory for the text files that ProBoard will
use (C:\PB\ANSI), a directory for the messagebase (C:\PB\MSG),
and a directory for PEX-files (C:\PB\PEX).
You should now have these subdirectories:
C:\PB\MENUS
C:\PB\ANSI
C:\PB\MSG
C:\PB\PEX
With previous versions of ProBoard (1.0x), you had to set 2
environment variables (PROBOARD and DSZLOG). This is not
necessary with this version. ProBoard will look for its data
files in the directory where PROBOARD.EXE is located. You can,
however, tell ProBoard to look for the data files in another
directory by setting the environment variable PROBOARD (eg. SET
PROBOARD=F:\PB). The environment variable DSZLOG used by most
protocols is not needed. ProBoard will set this variable prior to
starting the protocol.
ProBoard is now ready to be configured by ProCFG. This is
discussed in the next chapter.
Once ProBoard is installed, you may start it in a batch file.
ProBoard should ALWAYS be run in a batch file, because the program
returns to DOS when a user logs off.
This is the basic batch file for stand-alone operation (without a
mailer). It is called P.BAT and is included in PB_xxx.ZIP
:again
PB
if errorlevel 99 goto out
if errorlevel 1 goto fatal
goto again
:fatal
echo A fatal error occured.
goto x
:out
echo Normal exit.
:x
Note that errorlevels 2-4 generate a fatal error. These error-
levels are used for mail networking, and ProBoard should not
return one of these errorlevels in a standalone environment.
- 12 -
PROBOARD.EXE's command line options will be discussed later in
this manual. PB.EXE takes care of initializing the modem and
calling PROBOARD.EXE with the right parameters when a call comes
in.
- 13 -
┌───────────────────┐
│ IV. CONFIGURATION │
└───────────────────┘
ProBoard is completely configured by PROCFG.EXE. This program can
be executed from any directory. In most of the menus, just press
<Ins> to add an item, press <Del> to remove an item, and press
<Enter> to select an item.
System parameters
──────────────────────────────────────────────────────────────────
This is the first option to choose when running PROCFG.EXE. A
second menu will be displayed with the following items:
- Paths
- User parameters
- Security
- Yelling
- General
- File Transfer
- Display options
A description of these fields follows.
Paths (System Parameters)
──────────────────────────────────────────────────────────────────
Textfiles path............... Directory where ProBoard's textfiles
are stored (drive included!).
Menu path.................... Directory where ProBoard's menus are
stored (drive included!).
Message path................. Directory where the message base
will be stored (drive included!).
Upload path.................. Directory where the users' uploads
will be stored (drive included!).
Private Upload path.......... Directory where personal files
are stored. (for file exchange
between users).
Nodelist Directory........... Directory where the nodelist is
located. For use by the nodelist
compiler.
- 14 -
PEX Directory................ Directory where the PEX files should
be stored.
Editorname................... The external editor's filename and
path (eg. C:\PB\QUICKED.EXE). You
can also use shell options here
(refer to menu type 7 for more
info). Example: *SQUICKED.EXE
User parameters (System Parameters)
──────────────────────────────────────────────────────────────────
New user level............... The level a user will have upon his
or her first login.
New user flags............... The flags a user will have upon his
or her first login.
New user loglevel............ The loglevel a user will have upon
his or her first login (more info
about this later).
Security (System Parameters)
──────────────────────────────────────────────────────────────────
Allow quick login............ If this is enabled, the sysop can
login as sysop by pressing [Enter]
at the login prompt without
entering a password. If you don't
like this, just turn it off.
Write password messages...... If a user fails to log in because
he/she exceeded the maximum number
of password retries, ProBoard can
write a security message to that
person and to the sysop, telling
him/her what happened. This can be
turned on or off with this option.
Max. password tries.......... Maximum number of tries when a
user enters an incorrect password.
Min. password length......... The minimum length of a password.
Level for crashmail.......... Level needed to send crashmail.
- 15 -
Flags for crashmail.......... Flags needed to send crashmail.
Level for fileattach......... Level needed to do a file attach
for Netmail.
Flags for fileattach......... Flags needed to do a file attach
for Netmail.
Yelling (System Parameters)
──────────────────────────────────────────────────────────────────
Max. sysop pages............. Number of times a user can page the
sysop during one session.
PageBell length.............. Number of seconds the sysop paging
bell will ring.
Page start time.............. Users can only yell during these
Page end time hours (in 24h format).
General (System Parameters)
──────────────────────────────────────────────────────────────────
ShellMessage................. Textline to be displayed to the user
when an external program is run.
Sysopname.................... Sysop's full name.
Inactivity limit............. Number of seconds a user is allowed
to 'do nothing'. If the user hasn't
typed anything when this limit is
exceeded, he will be logged off.
Quote string................. This string is used to when ProBoard
quotes a message for a reply.
A '@' character is replaced by the
initials of the user who wrote the
message quoted from.
Mailcheck at login........... Determines whether ProBoard should
check for new mail and files upon
login.
- 16 -
Number of nodes.............. Maximum number of users allowed to
log in at the same time (max. 255).
(Explained later).
Allow ANSI................... Determines whether ANSI codes are
permitted.
Ask for phone number......... Determines whether ProBoard should
ask for a user's phone number upon
his/her first login.
Allow one-word names......... Determines whether a user's name can
be a single word.
Allow message uploads........ Determines whether messages can be
uploaded. (not implemented yet)
European date format......... If this is enabled, all dates will
be shown in European format
(DD/MM/YY).
Log local calls.............. Determines whether local logins
should be logged in the logfile.
Use swapping................. Determines the default shelling mode.
If this option is set to ON, ProBoard
will be swapped to disk/EMS, leaving
only 2000 bytes resident!
"Fast" Mode.................. When this option is enabled,
ProBoard will use about 10Kb more
memory (depending on the number
of file-areas), but the system
will run faster.
Kill netmail when sent....... Controls whether netmail will be
killed after a message has been
exported from the messagebase.
Hide sysop activity.......... If enabled, all information about
the sysop will be hidden for the
users. This means that your name
will not appear in the userlist and
in the list of online users.
Origin line.................. Default origin line, used for
Echomail (more about this later).
- 17 -
File Transfers (System Parameters)
──────────────────────────────────────────────────────────────────
Minimum upload space......... Space needed on the upload drive for
uploads to be allowed.
Download start time.......... Users can only download between
Download end time these hours. (except when a flag
is set in the user's record)
Protocols
──────────────────────────────────────────────────────────────────
The second (POWERFUL) option in PROCFG.EXE is 'Protocols'. You may
want to skip this option when doing a first-time installation of
ProBoard, as many protocols are already pre-installed in the
file PROTOCOL.PRO.
Downloading and uploading files has always been one of the most
important activities of BBS's. Most BBS programs have file
transfer protocols pre-installed and do not allow additional
protocols to be configured. ProBoard's philosophy is entirely
different: no protocols are actually embedded in the code, all
protocols are external and are being called by ProBoard. These
protocols are NOT included with ProBoard. They have to be obtained
from other sources (available on most BBS systems). As of yet, we
don't know of any external protocol incompatible with ProBoard,
Bimodem included! If you happen to find an incompatible external
file transfer protocol, please let us know!
Upon selection of the 'Protocols' option, a submenu is displayed
containing the protocols already present. Add a protocol by
pressing <Ins>, remove a protocol by pressing <Del>.
A protocol is entirely defined by the following parameters:
Name ........................ Protocol's name, to be displayed in
the down/upload menu. This can
include a short description if you
like.
Hotkey ...................... Key to be pressed by the user to
activate the protocol.
- 18 -
Batch ....................... Determines whether the protocol can
handle batch-mode (whether it can
handle multiple files). Xmodem for
example can handle only one file at a
time, while Zmodem can handle
multiple files.
Enabled ..................... ProBoard comes with some pre-
installed protocols for which you
may not have the necessary files.
It would be useless to have these
protocols displayed in the menu. You
can prevent this by setting Enable
to 'No', without having to loose the
pre-installed configuration for this
protocol.
Both-Way .................... Determines whether the protocol is a
full-duplex protocol, ie. whether it
can send and receive files at the
same time. (eg. Bimodem)
Bimodem ..................... The Bimodem protocol uses an odd
format for its control file. Setting
Bimodem to 'Yes' causes the control
file to be written to disk in
Bimodem-format.
Log-File .................... Name of the log file created by the
protocol. After the file transfer,
the information needed to update the
user-records will be obtained from
this file by ProBoard. Most
protocols write a file specified
in the environment variable DSZLOG.
ProBoard will set this variable to
the right filename for you. ProBoard
checks for the logfile in the
directory where it was started from,
so if some external protocol writes
a different logfile than the one
specified in the DSZLOG-variable,
make sure it writes the file in the
startup-directory!
- 19 -
Ctl-File .................... Protocols that can handle batch-mode
usually allow parameters to be
passed not only on the command line,
but also (should the command line
grow too long) by means of a control
file. ProBoard must know of this
file, to be able to pass the file-
names to the protocol.
DL Command .................. Command needed to start the protocol
in download-mode. You may want to
use the shell options of menu
function 7 here.
If the first character of this
command is a '@', then the named
pex-file will be run. Note that no
shell-parameters (*x) are supported
when calling a pex-file. You can use
string macros though.
IMPORTANT: The command should be in-
dependent of the path it
is called from.
Batch-mode protocols also require a
control file to be specified. Should
you, anywhere in this field, fill in
a '#', then this character will at
run-time be replaced by the filename
of the file to be sent (only for
non-batch protocols).
UL Command .................. Command needed to start the protocol
in upload-mode. Here also, the
command should be independent of the
directory it is called from and a
'#' will be replaced by the filename
of the file to be received (for
non-batch protocols), or by the
directory where files should be
received into (for batch-protocols).
A '@' as the first character will
execute a pex-file (see DL Command).
- 20 -
DL String ................... Determines what should be written in
the control file when downloading.
A '#' character is replaced by the
path and filename of the file to
be sent to the user. Most often, a
single '#' is the only character in
this field. This works for most of
the protocols.
Example:
In case a user wants to download 3
files, entering 'Send #' in this
field causes the following to be
written in the control file:
Send C:\PB\FILES\COMM\TM.ZIP
Send C:\PB\FILES\COMM\TBILL.ZIP
Send C:\PB\FILES\UTIL\SHEZ55.ZIP
You can always take a look at the
pre-configured protocols, to lighten
things up for you.
UL String ................... Same as the previous field, for
uploads. This field is seldomly used.
(Never in fact)
DL Keyword .................. In order to allow ProBoard to update
the user-records from the protocol's
log file, a keyword must be
specified to indicate a file has
successfully been sent. If a protocol
writes 'Sent <filename>' in the
logfile, you should specify 'Sent'
as the keyword. This keyword is CASE
SENSITIVE!
UL Keyword .................. Same as the previous field, for
uploads.
- 21 -
Wordnr ...................... This is the number of the sent file's
filename, counting from the keyword,
but NOT including the keyword. This
is used for both uploads and
downloads.
Eg. Sent 12/05/90 12334 PB_100.ZIP
In this case, you should enter '3'
as the word number, because
PB_100.ZIP is the third word counting
from, but not including, the
keyword ('Sent').
Efficiency .................. A percentage that gives the
throughput efficiency for this
protocol. This value is used to
estimate the time needed to perform
a file transfer.
CONCLUSION:
Correctly installing the protocols may seem somewhat difficult at
first, but you will soon get used to it. And don't forget that the
most popular protocols are already pre-configured in ProBoard!
Message areas
──────────────────────────────────────────────────────────────────
ProBoard can have up to 200 different message areas. Each message
area has its own name and properties; you could have message
areas for public messages only, and areas for Echomail.
You can configure all of this with the message area editor.
Selecting 'Message areas' from the main menu, gives you a list of
the available areas (which initially is empty of course). You
edit a message area by pressing [Enter].
A message area has the following fields:
Name ........................ Name of this message area.
- 22 -
Message kind ................ The kind of message. You can have:
- Local Local messages
- Echo Echomail
- Net Netmail
- Pvt Echo Private Echomail
One word about the difference between
the "Echo" type and the "Pvt Echo"
type: In "Echo" areas, it is not
allowed to delete messages that have
been exported by an echomail
processor (as specified by the FTSC,
the FidoNet Technical Standards
Committee). In a "Pvt Echo" area, this
restriction is not imposed.
Message type ................ One of the following:
- Private only Only private
messages allowed.
- Pvt/Public Private or public
messages allowed.
- Public only Only public
messages allowed.
Name Options ................ Determines which names can be used
to write messages in this area. This
can be:
- Real Names Only
- Free Alias
- Fixed Alias
It is recommended that areas where
aliases are allowed, are made
"Public Only".
Read Level .................. Level needed to read messages in
this area.
Read Flags .................. Flags needed to read messages in
this area.
Write Level ................. Level needed to write messages in
this area.
Write Flags ................. Flags needed to write messages in
this area.
- 23 -
Sysop Level ................. Level needed to be allowed EVERYTHING
in this message area.
Sysop Flags ................. Flags needed to be allowed EVERYTHING
in this message area.
Origin Line ................. Only for Echomail: if you do not
specify this, the default origin
line will be used (refer to
'System parameters').
Use AKA ..................... The network address for this area
(for Echomail & Netmail only).
Kill after xx days .......... When running the PBUtil 'message-
killer', all messages that have
been in the messagebase for xx days
will be deleted.
Kill rcvd after xx days ..... When running the PBUtil 'message-
killer', all messages that have
been received for xx days will be
deleted.
Max # messages .............. The maximum number of messages
allowed in this area. When this
number is exceeded, PBUtil will
delete the oldest messages from
the messagebase.
File areas
──────────────────────────────────────────────────────────────────
File areas are used to categorize downloadable files. You can even
prevent groups of users to access certain file areas.
A file area has the following fields:
Area name.................... Name of this file area.
Listing file................. Full path & filename of the file in
which the downloadable files are
described (more about this in the
menu-functions description).
File Location................ Directory where the files in this
area are located.
- 24 -
Access Level................. Level needed to download files in
this area.
Access Flags................. Flags needed to download files in
this area.
CD-ROM Option................ Setting this option to 'Yes' makes
the file listings look somewhat
different (refer to the 'List Files'
function).
Max. files................... Maximum number of files that can be
downloaded from this area per
user per day (0 means unlimited).
Max. Kb...................... Maximum number of Kbytes that can be
downloaded from this area per
user per day (0 means unlimited).
Time/Download Limits
──────────────────────────────────────────────────────────────────
In ProBoard you can grant different groups of users different
rights concerning download-limits and maximum online time per day.
Additionally, you can limit downloading in a very powerful and
flexible way.
Editing user levels is done in the usual way (<Ins>,<Del>,
<Enter>).
These are the fields to be specified for each level:
Security Level............... The userlevel you are editing. More
about this later.
Time per day................. Time a user with this level can
spend on your system each day.
Kb download per day.......... Daily download-limit associated with
this user level (in Kbytes/day).
Download delay............... Time to be spent per session before
a download can be made (great to
calm down excessive downloaders).
- 25 -
Usergroup ID................. String of max. 5 characters that
identifies this level, eg. NEW,
REG, VIP. This is optional.
These ID's will be shown in the
user listing.
Free Download................ The amount that can be downloaded
by users with this level, without
having to upload or write messages.
Upload Factor................ The percentage of total downloads
the user has to upload.
Eg. if the upload factor is 15%, and
a user has downloaded 1000Kb, he
will have to upload 150Kb.
Setting this to 0 allows the users
to download as much as they want,
until the download limit (see below)
is reached. Of course, it is
impossible to download more than the
daily maximum each day.
Kb / Message................. The amount of Kilobytes that can be
downloaded free for each message
written. This rewards busy message-
writers by increasing their download-
limit. The amount of kilobytes is
added to the free download number
(see above)
Download Limit / Fallto...... When this limit is set to a positive
non-zero value, and a user reaches
this limit, his/her level will be
changed to the "Fallto" level.
Modem parameters
──────────────────────────────────────────────────────────────────
You don't have to change these parameters when using ProBoard with
a mailer. Should ProBoard, however, need to answer the phone, you
may want to take a look at (and change) these parameters.
- 26 -
You can place special codes in the modem command strings:
^ DTR high
` DTR low
| Sends <Return> to the modem
~ Pauses for 1/2 second
Max. Baud Rate............... Maximum baud rate your modem can
handle.
Com-port..................... Number of the com-port the modem is
connected to (1-8).
Blanktime (s)................ Time after which the (YOUR) screen
goes blank, to prevent burn-in.
Quiet mode................... Determines whether ProBoard should
or shouldn't 'beep'.
Modem delay.................. Number of 1/10 seconds to be paused
between each character that is sent
to the modem (some modems can't
handle FAST input).
Init string.................. String to be sent to the modem to
initialize it and to have the modem
ready to answer the phone.
Init response................ String returned by the modem if the
initialization was successful.
Busy string.................. String to be sent to the modem when
the BBS is off-line (because sysop
pressed <Esc> or is locally logging
in).
XXX bps call................. String returned by the modem upon an
XXX bps call. This is a 'partial'
string. So if the modem sends
'CONNECT 2400/REL', the string
'CONNECT 2400' will match.
A '|' can be used to specify a CR.
(eg. 'CONNECT|' for a 300 bps call)
- 27 -
Events
──────────────────────────────────────────────────────────────────
It is possible to instruct ProBoard to perform some action at a
set time and day (an "Event"). This action can be: exiting with
a specific errorlevel or executing a DOS-command.
You can define up to 30 events. An event is described by the
following fields:
Enabled...................... If this is set to 'No', the event
will be ignored.
Active Days.................. Determines on what days of the week
this event will run. To edit this
field, press <Enter> and toggle
the 'Yes/No' fields displayed next
to each day.
Event Time................... The time at which the event has to
run on the selected days (in 24h
format).
Duration..................... How long this event has to stay
active. During the event, no users
are allowed to log in on ANY node.
Event type................... 'Command' : A DOS-command will be
executed when the event
is activated.
'Errlevel': When the event is
activated, PB.EXE will
exit with an errorlevel,
specified in the next
field.
Errorlevel................... The errorlevel to use for this event
if the event type is set to
'Errorlevel'.
DOS-command.................. The DOS-command to execute for this
event if the event type is set to
'Command'.
Node number.................. An event will run on ONE node. You
can specify the node here.
- 28 -
When using a frontend-mailer, you only have to specify the time,
days and duration, because the events have to be executed by the
mailer.
Personal Files
──────────────────────────────────────────────────────────────────
ProBoard allows users to send files to another user on the BBS.
ProBoard keeps track of each uploaded file. You edit them with
this option in ProCFG. In the list of files, a [+] means that the
file exists in the private upload directory.
To edit an entry, press <Enter>, to Delete an entry, press <Del>,
and to add an entry, press <Ins>.
Filename..................... Name of the uploaded file.
From User.................... Who uploaded this file?
To user...................... The destination user of this file.
Date......................... The date on which this file was
uploaded.
It is possible to add files to this list. This way you can send a
file to a specific user. Deleting files is possible too. If the
file specified in the entry to be deleted physically exists,
you will be asked if you want to delete the file on disk.
- 29 -
┌─────────────┐
│ V. SECURITY │
└─────────────┘
Levels & Flags
──────────────────────────────────────────────────────────────────
All security procedures toward a user are being done through the
user's LEVEL and FLAGS. ProBoard can have levels ranging from 0 to
32000, and provides 26 flags (A-Z) that can be ON or OFF.
If a menu needs a certain level and flags are needed, then only the
users with a level equal to or higher than that level and with all
the needed flags will be able to SEE and CHOOSE this menu option.
It will remain invisible to all the other users.
An example will be given in the next chapter.
Trashcan
──────────────────────────────────────────────────────────────────
It is possible to specify names that cannot be used to log on to
your system. Often used fake names are: "Sysop", "BBS", etc...
You can specify these names in a textfile called TRASHCAN.CTL.
Each line in this file specifies an unwanted or illegal name.
An example file is included.
- 30 -
┌───────────┐
│ VI. MENUS │
└───────────┘
This is the most important part of a BBS, and therefore of
ProBoard. Menus are the direct interface between a user and the
BBS. They are used to execute all the BBS functions, and they can
have their own submenus. They take care of security, by sealing
themselves off from certain users or groups of users. ProBoard can
make your BBS have a very personal look, as the menus can be built
in a VERY flexible way.
Setting up menus
──────────────────────────────────────────────────────────────────
A menu is basically line-oriented. Every line is linked to a
function to be executed and to a textline to be shown to the user.
Every line/function has its own level and flags, to make sure that
not all of the menu items are available to every user.
A menu line has the following fields:
Textline..................... Textline to be displayed to the user.
Hotkey....................... Key to be pressed by the user to
activate this menu item.
Function..................... Function to be executed.
Data......................... Data associated with this menu item.
Level........................ Level needed to access this menu item.
Flags........................ Flags needed to access this menu item.
Color........................ Color of the menu line.
- 31 -
Menu security
──────────────────────────────────────────────────────────────────
To clarify menu security, here's a simple example:
Suppose we have 4 users with the following levels and flags:
┌──────────────────────┬───────┬─────────┐
│ Name │ Level │ Flags │
│----------------------│-------│---------│
│ Pete │ 10 │ Z │
│ Jerry │ 100 │ P │
│ Al │ 100 │ R │
│ Charlie │ 200 │ P & R │
└──────────────────────┴───────┴─────────┘
Let's define a menu with textlines only:
┌───────────────────────┬───────┬────────┐
│ Text │ Level │ Flags │
│-----------------------│-------│--------│
│ Good morning; │ 10 │ │
│ ,; │ 50 │ P │
│ Jerry │ 100 │ P │
│ and; │ 150 │ │
│ Al; │ 100 │ R │
│ send their best wishes│ 200 │ P & R │
│ . │ 300 │ │
│ :-) │ 10 │ X,Y,Z │
└───────────────────────┴───────┴────────┘
This would give the following result when the menu is displayed:
┌─────────────────┬─────────────────────────────────┐
│ Pete │ Good morning │
╞═════════════════╪═════════════════════════════════╡
│ Jerry │ Good morning,Jerry │
╞═════════════════╪═════════════════════════════════╡
│ Al │ Good morning,Al │
╞═════════════════╪═════════════════════════════════╡
│ Charlie │ Good morning, Jerry │
│ │ and Al send their best wishes │
└─────────────────┴─────────────────────────────────┘
The last lines of the menu will NEVER be displayed, because none
of the 4 users have the required level AND flags.
- 32 -
Creating menus
──────────────────────────────────────────────────────────────────
The BBS's main menu should be stored in the file TOP.MNU. All the
other menus can have any filename you want to give it.
When you select the 'Menu Editor' option in PROCFG's main menu, a
new window will be opened containing the menus already available.
In this window, you can use the following keys:
- Up/Down Scroll up/down.
- Enter Select a menu.
- Ins Add a menu.
When you have selected a menu, a list of all the menu items will
be displayed. To add a menu item, just move past the last item and
press <Enter>. To insert an item, press <Ins>, to remove one,
press <Del>. To edit a menu item, move the selector to that item
and press <Enter>.
You can change the menu prompt and highlight colors by pressing
Alt-P. If you want to see how a menu will look like, press Alt-S.
A menu item has the following fields:
Textline..................... This is the string to be displayed.
Leaving this field blank causes a
blank line to be displayed to the
user. A CR/LF will be sent after
the menu line. To avoid this, just
enter a ';' as the last character.
This will cause the next textline
of the menu to be appended to this
one.
Special textline characters:
^ : Switches between normal and
highlighted color.
~ : Replaced by the number of
minutes the user has left in
this session.
` : Replaced by the name of the
current message area (more
about this later).
@ : Replaced by the name of the
current file area (more about
this later).
- 33 -
This textline can also contain
text-macros like @<NAME>@ or
@<NODE>@. More about this in the
"Text macros" section.
Hotkey....................... Most of the menu functions must be
chosen by the user, so ProBoard must
react to certain key-presses from
the user. Receiving the hotkey for a
certain menu item will cause
ProBoard to execute the function
associated with this item.
The hotkey can be any ASCII
character or digit, and sometimes
even ?./+ etc. ,but one character
has a special meaning to ProBoard:
pressing <Ctrl-A> will make this
function AUTOEXEC, which means that
this function will be executed as
soon as this menu item is displayed
(without really selecting this
option).
Function..................... The function associated with this
menu item. Pressing the <Enter> key
will cause a complete list of all
the menu functions to be displayed
in a separate window.
Data......................... This field is optional with some of
the functions. Basically, in this
field you enter the parameters of a
menu function. Eg. function 40
(Display ASC/ANS file) needs a file-
name as data (parameter). Function 1
(Goto menu) needs the name of the
menu to be jumped into.
Text-macros can be inserted (see
"Text macros" section).
Level........................ Level needed to access this menu
item.
Flags........................ Flags needed to access this menu
item.
Color........................ Color for the menu's textline to be
displayed in.
- 34 -
Hints
──────────────────────────────────────────────────────────────────
You can create a menu by using textlines, but you can also create
menus that display a file to the user, in which all the options
are shown. This technique works as follows:
The first item in the menu should have ';' as textline and
<Ctrl-A> (autoexec) as hotkey. The function to be executed should
be function 40 (Display file with hotkeys). When the user accesses
this menu, the specified file will immediately be sent. Setting
all the remaining textlines of the menu to ';' will cause
NOTHING BUT this file to be displayed.
Combined with the use of text macros, this allows you to show
different looking menus for each node you are running. For
example, if you use function 40, and enter "MAIN@<NODE>@" in the
data field, node 1 will see file MAIN1 , node 2 will see MAIN2,
etc...
If you need more information about this, you can always take a look
at the example menus.
Menu functions overview
──────────────────────────────────────────────────────────────────
In this function overview, parameters between <> are REQUIRED,
and parameters between [] are optional.
- 35 -
┌────────────────────────────────────────────────────────────────┐
│ Function 1: GOTO MENU │
└────────────────────────────────────────────────────────────────┘
DATA: <menu name> [/M=<nr msgarea>] [/F=<nr filearea>] [/P=<pwd>]
This function makes ProBoard jump to menu <menu name>.
Option /M can be used to define one single menu for several
message areas. You could jump to a 'general' message area menu and
pass option /M=3, to make message area 3 active for the selected
menu. Please refer to function 23 (Read messages) for more
information about this option.
Option /F works exactly the same, but applies to file areas.
It is possible to protect a menu with a password by using the /P=
option. For example: "SYSOP /P=Test" would protect menu "SYSOP"
with the password "Test". The user will have to enter this
password to be allowed to move to the menu.
Data example: MSG /M=5
┌────────────────────────────────────────────────────────────────┐
│ Function 2: GOSUB MENU │
└────────────────────────────────────────────────────────────────┘
DATA: <menu name> [/M=<nr msgarea>] [/F=<nr filearea>] [/P=pwd]
This function is largely the same as the previous function (it
even has the same parameters), but the menu this function is called
from is pushed onto an internal stack. ProBoard will jump back to
this menu when returning from menu <menu name> (by executing
function 3).
┌────────────────────────────────────────────────────────────────┐
│ Function 3: GOTO PREVIOUS MENU │
└────────────────────────────────────────────────────────────────┘
DATA: -
This function makes ProBoard go back to the previous menu if you
used function 2.
- 36 -
┌────────────────────────────────────────────────────────────────┐
│ Function 4: GOTO MENU & CLEAR STACK │
└────────────────────────────────────────────────────────────────┘
DATA: <menu name> [/M=<nr msgarea>] [/F=<nr filearea>] [/P=pwd]
This function performs the same tasks as function 1, AND will
clear the existing menu stack, thus preventing the user from
returning to the previous menu.
┌────────────────────────────────────────────────────────────────┐
│ Function 5: SHOW ANS/ASC FILE │
└────────────────────────────────────────────────────────────────┘
DATA: <filename>
This function displays a file to the user with the extension .ANS
or .ASC, depending on the user's ANSI-setting. The file must be
stored in ProBoard's textfiles directory; <filename> should NOT
contain an extension (max. eight characters). If ProBoard doesn't
find the .ANS file, it will look for the .ASC file.
┌────────────────────────────────────────────────────────────────┐
│ Function 6: CHANGE COUNTRY │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to change the country in his user-record.
- 37 -
┌────────────────────────────────────────────────────────────────┐
│ Function 7: SHELL │
└────────────────────────────────────────────────────────────────┘
DATA: <command line>
With this function, you can instruct ProBoard to execute an
external program from a shell.
Parameter <command line> needs full path and filename (.COM or
.EXE extension included), and may contain some special codes.
These codes will (at run-time) be replaced by a value or a string.
Special codes:
** Replaced by an asterisk ('*')
*# Replaced by the node number.
*\ Sends the message "Sysop is shelling..." to the user
before the shell is executed, and the message "Sysop
has returned..." afterwards.
*B Baud rate on which user logged in.
*C Gives full path of the command interpreter, usually
C:\COMMAND.COM, by looking at the DOS environment
variable COMSPEC.
*D Writes a DOOR.SYS file to the current directory before
shelling.
*E Writes EXITINFO.BBS to the current directory before
shelling and reads it back afterwards.
*F User's first name.
*G Indicates whether user has ANSI (1) or ASCII (0) set.
*H Tells ProBoard not to disable the fossil driver when
shelling.
*I Maximum user-inactivity (seconds).
*L User's last name.
*M ProBoard's start-up directory (already contains '\').
*N Shell will NOT be logged in PROBOARD.LOG.
- 38 -
*P Com-port used by ProBoard (1-8).
*Q Don't let user know that ProBoard is shelling (!).
*R User's record number in USERS.PRO.
*S ProBoard's system directory (incl. trailing '\')
*T Time left for the user today (minutes).
*W Runs the shell in a window , so the status on the last
line will not be cleared. This option only works with
programs that send their output to the standard output
device (no direct screen writes).
*X ALWAYS SWAP to disk/EMS, even if swapping is enabled
in ProCFG.
*Y DO NOT SWAP to disk/EMS.
*1 Installs a timer-function when shelling, which
continuously redisplays the user's status line on the
first screenline. This can be used with ALL programs.
(Works great most full-screen protocols!)
*2 Same as *1, but uses the bottom screenline (try this
with QuickEd!)
Suppose ProBoard is in directory D:\PB.
Data example: *Q*STEST.EXE *B
ProBoard will execute D:\PB\TEST.EXE 2400 and the user won't see
this happening.
When shelling, ProBoard writes a standard DORINFOx.DEF file, where
x stands for the node-number. An RA-compatible EXITINFO.BBS file
and a DOORWAY-compatible DOOR.SYS can also be created by
specifying the *E and/or *D options. All these files are created
in the directory where ProBoard is started from.
- 39 -
┌────────────────────────────────────────────────────────────────┐
│ Function 8: SHOW VERSION INFORMATION │
└────────────────────────────────────────────────────────────────┘
DATA: -
This function shows information about ProBoard's version number.
If you have a registered copy of ProBoard, the sysop's name and
BBS-name will be shown. With this function, you can show off to
your users that you're a nice sysop: one that registered!
┌────────────────────────────────────────────────────────────────┐
│ Function 9: LOGOFF │
└────────────────────────────────────────────────────────────────┘
DATA: -
Shows the file GOODBYE.ANS/ASC and hangs up the phone.
┌────────────────────────────────────────────────────────────────┐
│ Function 10: SHOW SYSTEM USAGE PER HOUR │
└────────────────────────────────────────────────────────────────┘
DATA: -
Shows a bar graph of the average system usage per hour. From the
day you install ProBoard, it will keep track of a usage rate per
hour and per day. If you want to reset the usage values, just
delete the file TIMELOG.PRO or edit the values using ProCFG.
- 40 -
┌────────────────────────────────────────────────────────────────┐
│ Function 11: CHAT REQUEST │
└────────────────────────────────────────────────────────────────┘
DATA: -
This function allows the user to make a request to chat with the
sysop. The user will be prompted for a reason why he wants to
chat. The minimal length of this reason must be 5 characters.
You can define your own page-melody by creating a RemoteAccess-
compatible description file. The format of this file is described
in the reference section.
┌────────────────────────────────────────────────────────────────┐
│ Function 12: EXECUTE QUESTIONNAIRE SCRIPT │
└────────────────────────────────────────────────────────────────┘
DATA: <scriptname>
This function executes a questionnaire. A questionnaire is a
common ASCII-file containing several commands to be executed by
ProBoard. A questionnaire scriptfile has an extension .Q-A, and
the user's answers will be stored in a file with the same
filename, but with extension .ASW.
Starting from version 1.15, you can write very powerful
questionnaires by using the ProBoard SDK.
You can use the following commands in a scriptfile:
ASK <length> <number of variable>
eg: Ask 10 1
Asks the user something. The user has <length> characters to
answer, and the answer will be stored in the variable <number
of variable>. The maximum number of variables in ProBoard is 20.
- 41 -
CHANGECOLOR <color>
eg: ChangeColor 3
Changes the color in which the following text will be displayed.
The number <color> is the ANSI color code, which means that this
function works only for users who use ANSI.
CLEARSCREEN
Well, what do you think?
DISPLAY "<string>"
eg: Display "Hi there!"
Displays a string <string>. The string must be contained in double
quotes; a '|' in a string will be replaced by CR/LF (new line).
IF <number of variable> = "<string>"
eg. If 1 = "Y"
Directs the .Q-A file according to the user's answers.
If the condition is met, all commands after the IF-statement will
be executed, until an ENDIF is encountered.
ENDIF
Ends an IF-statement.
eg: Display "Do you have a hard disk?"
GetChoice YN 1
If 1 = "Y"
Display "Storage space in Mb?"
Ask 2
EndIf
Display "..."
GETCHOICE <options> <number of variable>
eg: GetChoice YN 1
Forces the user to give a proper answer, chosen from <options>.
- 42 -
OUTPUTANSWER ["<description>"] <number of variable>
eg: OutputAnswer "Name: " 1
Writes ["<description>"] and the value in <number of variable> to
the .ASW-file. <description> is optional.
POSTINFO
Writes a header to the .ASW-file. The header contains some general
information about the user ("Peter Piper answered on ...").
QUIT
Ends execution of the questionnaire script.
SETFLAG <flag> <ON/OFF>
eg: SetFlag C ON
Sets/clears user flag <flag>.
┌────────────────────────────────────────────────────────────────┐
│ Function 13: DISPLAY USERLIST │
└────────────────────────────────────────────────────────────────┘
DATA: -
Prompts the user for a name (or part of a name) and goes looking
for it in the name fields of USERS.PRO. If the user doesn't
specify a string (if he presses <Enter>), the entire userlist
will be displayed.
- 43 -
┌────────────────────────────────────────────────────────────────┐
│ Function 14: DISPLAY TIME INFO │
└────────────────────────────────────────────────────────────────┘
DATA: -
Displays information about the current time, time online,
remaining time, etc.
┌────────────────────────────────────────────────────────────────┐
│ Function 15: SHOW ANS/ASC FILE & WAIT │
└────────────────────────────────────────────────────────────────┘
DATA: <filename>
Displays an ANS/ASC-file (like function 5) and waits for the user
to press <Enter>.
┌────────────────────────────────────────────────────────────────┐
│ Function 16: CHANGE CITY │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to change the city in his user-record.
┌────────────────────────────────────────────────────────────────┐
│ Function 17: CHANGE PASSWORD │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to change his password.
- 44 -
┌────────────────────────────────────────────────────────────────┐
│ Function 18: CHANGE SCREENLENGTH │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to change his screen's length (# lines).
┌────────────────────────────────────────────────────────────────┐
│ Function 19: TOGGLE CLEARSCREEN CODES │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to decide whether he wants clearscreen-codes sent
or not.
┌────────────────────────────────────────────────────────────────┐
│ Function 20: TOGGLE MORE PROMPT │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to decide whether scrolling should pause when the
screen is full.
┌────────────────────────────────────────────────────────────────┐
│ Function 21: TOGGLE ANSI CODES │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to choose ANSI graphics/colors or not.
- 45 -
┌────────────────────────────────────────────────────────────────┐
│ Function 22: CHECK FOR PERSONAL MAIL & FILES │
└────────────────────────────────────────────────────────────────┘
DATA: -
Searches all the message areas for messages addressed to the user
that have not yet been received by him.
This function also checks for personal files addressed to him/her.
┌────────────────────────────────────────────────────────────────┐
│ Function 23: READ MESSAGES │
└────────────────────────────────────────────────────────────────┘
DATA: <area> or <*> or <0>
Allows the user to read a message. If <area> is specified (a
number ranging from 1 to 200), then only messages from message
area <area> can be read. If <*> is specified, only messages from
the active area can be read (refer to the goto/gosub menu functions
and to function 49). If <0> is specified, only messages from areas
selected in the combined boards can be read.
The user has several options when reading messages:
Forward : First to last.
Reverse : Last to first.
New : New messages not read by the user.
Selected : Messages selected by name or subject.
Marked : Marked messages only.
When a message is read, the user has the following options:
Next : Next message.
Previous : Previous Message
Again : Show this message again.
Stop : Stop reading messages.
- 46 -
Mark : Mark this message for later use.
Reply : Reply to this message. The entire message will
be passed to the external fullscreen editor,
thus making it possible to quote text from the
original message in your reply.
Unread : Set this message to 'Not received'.
Delete : Delete this message from the message base.
Forward : Copy the message and address it to somebody
else.
Move : Move this message to an other message area.
Private : Toggles the private/public status of the
message.
Export : Export this message to any file.
+ / - : Show the next/previous message in the
reply-chain.
Original : Go back to the message where you first used
+/- to follow replies.
┌────────────────────────────────────────────────────────────────┐
│ Function 24: SCAN MESSAGES │
└────────────────────────────────────────────────────────────────┘
DATA: <area> or <*> or <0>
Gives an overview of the messages. Only the message-header will
be displayed, and the user has the possibility to mark messages
for later retrieval. The options follow the same rules as in
function 23 (Read messages).
- 47 -
┌────────────────────────────────────────────────────────────────┐
│ Function 25: QUICKSCAN MESSAGES │
└────────────────────────────────────────────────────────────────┘
DATA: <area>/<*>/<0>
Same as the previous function, but only an overview in short form
is displayed. The user does not have the possibility to mark
messages. The options follow the same rules as in function 23
(Read messages).
┌────────────────────────────────────────────────────────────────┐
│ Function 26: DISPLAY TIME INFO │
└────────────────────────────────────────────────────────────────┘
DATA: -
Displays some interesting statistics about the current user, like
time remaining, daily time limit, etc...
┌────────────────────────────────────────────────────────────────┐
│ Function 27: WRITE A MESSAGE │
└────────────────────────────────────────────────────────────────┘
DATA: <area> or <*> [/L] [/T="<name of addressee>"]
Allows the user to write a message. The area <area> (a number
ranging from 1 to 200) can be replaced by <*> (refer to function 23).
Optional parameters:
/L The user will be logged off after writing this message.
/T The destination (the addressee's name) is automatically
specified. It is not necessary to use quotes (") when
the username does not contain spaces.
eg: /T=Sysop Writes a message to the sysop.
/T="Peter Piper" Writes a message to Peter Piper.
- 48 -
┌────────────────────────────────────────────────────────────────┐
│ Function 28: COMBINED BOARDS SELECT │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to select multiple message areas when using the
'combined boards read/scan' function. This is useful when a user
is not interested in certain message areas.
┌────────────────────────────────────────────────────────────────┐
│ Function 29: SYSTEM USAGE PER WEEK │
└────────────────────────────────────────────────────────────────┘
DATA: -
Displays a graph of the system-usage in percent for the last 24
weeks.
┌────────────────────────────────────────────────────────────────┐
│ Function 30: SHOW DIRECTORY │
└────────────────────────────────────────────────────────────────┘
DATA: [directoryname]
Shows a list of all the files stored in the specified directory.
If no directory is given, the user will be prompted for one.
┌────────────────────────────────────────────────────────────────┐
│ Function 31: LIST FILES │
└────────────────────────────────────────────────────────────────┘
DATA: <area> or <X>
Lists the files in the specified file area. If <X> was specified,
the files in the active file area will be shown. The list of these
files must be stored in a textfile created by the sysop (refer to
file area configuration). This textfile should contain the names
and descriptions of the files. The description can be of any form
you like.
- 49 -
A line in the textfile should look like this:
a) <filename> <blanks> <description>
Filename + date + size + description will be displayed in the
appropriate colors.
b) <+> <description>
The <+> will cause the description to be placed at the same
horizontal cursor position and in the same color as the
description from (a). This line will be displayed when
searching for files.
c) <!> <description>
The description will be placed at the left of the screen, in
the same color as the descriptions above. This line will be
displayed when searching for files.
d) <;> <description>
Same as in (c), but the color is white.
e) <description>
Same as in (d), but this line will NOT be displayed when
searching for files.
Example:
=============================================================
PB_110.ZIP ProBoard version 1.10
+Best BBS program in the world
!Original Belgian Product
;Flanders' Technology !!!
=============================================================
- 50 -
This will be output as:
============================================================= [c2]
PB_110.ZIP 18/12/90 268583 ProBoard version 1.10 [c1]
Best BBS program in the world [c1]
Original Belgian Product [c1]
Flanders' Technology !!! [c2]
============================================================= [c2]
[c1] stands for color 1, [c2] stands for color 2.
If a file area is configured as being CD-ROM, the file listing
should look slightly different. Option (a) will become:
a) <filename><blanks><date><blanks><filesize><blanks><description>
There is one more thing you can do to make your file listings more
colorful (previously undocumented) : Inserting Ctrl-A to Ctrl-G
characters in your file listing will change the color to:
Ctrl-A Red
Ctrl-B Green
Ctrl-C Yellow
Ctrl-D Magenta
Ctrl-E Blue
Ctrl-F Cyan
Ctrl-G White
┌────────────────────────────────────────────────────────────────┐
│ Function 32: DOWNLOAD A FILE │
└────────────────────────────────────────────────────────────────┘
DATA: <area selection> or </A> or </F<filename>> or </P>
Allows the user to download a file. The file areas a user can
download from are defined by the area selection. This is a list
of area-specifications, separated by blanks. Each specification
has the form:
[+]<area>
<-><area>
The '+' sign stands for 'Include this area in the area-list', and
is optional.
The '-' sign stands for 'Exclude this area from the area-list'.
The parameter <area> should be one of the following:
- 51 -
* All areas.
C CD-ROM areas only.
X Currently active area.
<n> Area number <n>.
<n1-n2> Areas <n1> to <n2>.
Examples:
* All areas
* -C All non-CD-ROM areas.
* -3-9 +5 Areas 1,2,5,10,11,...
X +2 Active area + area 2.
C -2 All CD-ROM areas, except area 2
Of course, a user must have the necessary download-rights in an
area to be allowed to download files from it.
You can also specify 3 other parameters:
/A Allows the user to download ANY file accessible
by DOS. When using this option, the full path
and filename must be specified. This option is
only intended for remote sysops.
/F<filename> The user will not be prompted for a file, but
the file <filename> will immediately be sent to
the user (useful for textfiles describing all
the files on the BBS).
Parameter <filename> should contain the full
pathname (eg. /FC:\PB\PB.DOC).
/P The user can only download personal files
addressed to him.
- 52 -
┌────────────────────────────────────────────────────────────────┐
│ Function 33: UPLOAD A FILE │
└────────────────────────────────────────────────────────────────┘
DATA: [directory] or [/P]
Allows the user to upload a file to the BBS. If [directory] is
specified, the upload will be placed in that directory. If not,
it will be placed in the default upload-directory specified in
PROCFG. (unregistered versions will always use the default
upload directory).
Upon successful reception of the file, the user will be prompted
for a description of that file. The description can be several
lines. If it begins with a '/', this description will be written
to the file FILES.PVT in the upload-directory, else it will be
written to the file FILES.BBS.
If the data field contains "/P", the user can upload a personal
file to another user. In this case the upload will be placed in
the private upload directory (specified in ProCFG).
┌────────────────────────────────────────────────────────────────┐
│ Function 34: VIEW ARCHIVE │
└────────────────────────────────────────────────────────────────┘
DATA: <area selection>
View the contents of a ZIP/LZH/ZOO/ARC/ARJ-file. The file
specification input by the user will be looked for in the areas
specified in <area selection>. Please refer to function 32
(Download) for more information.
┌────────────────────────────────────────────────────────────────┐
│ Function 35: KEYWORD SEARCH │
└────────────────────────────────────────────────────────────────┘
DATA: <area selection>
Looks for a character string in the file descriptions. If the
string is found, the related file and its description will be
displayed. The character string will be looked for in the areas
specified in <area selection>. Please refer to function 32
(Download) for more information.
- 53 -
┌────────────────────────────────────────────────────────────────┐
│ Function 36: FILENAME SEARCH │
└────────────────────────────────────────────────────────────────┘
DATA: <area selection>
Looks for a filename in the file listings (wildcards allowed).
The filename will be looked for in the areas specified in
<area selection>. Refer to function 32 (Download) for more
information.
┌────────────────────────────────────────────────────────────────┐
│ Function 37: SHOW NEW FILES │
└────────────────────────────────────────────────────────────────┘
DATA: <area selection>
Shows a list of files more recent than a date specified by the
user. If the user does not specify a date, then that date will be
the last time this user logged in. The files will be looked for
in the areas specified in <area selection>. Please refer to
function 32 (Download) for more information.
┌────────────────────────────────────────────────────────────────┐
│ Function 38: VIEW A FILE │
└────────────────────────────────────────────────────────────────┘
DATA: <directory>
This functions asks for a filename, and then looks for (and shows)
the file stored in <directory>.
┌────────────────────────────────────────────────────────────────┐
│ Function 39: DISPLAY NAMED FILE │
└────────────────────────────────────────────────────────────────┘
DATA: <full filename>
Displays a file to the user. The data field <full filename> must
contain path, name and extension.
- 54 -
┌────────────────────────────────────────────────────────────────┐
│ Function 40: DISPLAY ANS/ASC FILE WITH MENU HOTKEYS │
└────────────────────────────────────────────────────────────────┘
DATA: <filename without extension>
This function is the same as function 5, but can only be used in
'autoexec-menus', because it shows an ANS/ASC-file AND checks for
menu hotkeys at the same time. Please refer to the section about
menus for more information about the autoexec-concept.
┌────────────────────────────────────────────────────────────────┐
│ Function 41: TOGGLE FULLSCREEN EDITOR │
└────────────────────────────────────────────────────────────────┘
DATA: -
Lets the user decide whether he will use ProBoard's line editor or
the (external) fullscreen editor.
┌────────────────────────────────────────────────────────────────┐
│ Function 42: TOGGLE COMMAND STACKING │
└────────────────────────────────────────────────────────────────┘
DATA: -
Lets the user decide whether he will work with hotkeys or with
combinations of hotkeys and command stacking (à la Opus). The
command stack execution is initiated by pressing <Enter>.
A ';' in the command stack will be replaced by <Enter>.
Eg. M1WSysop;Subject;Y
This would write a private message in message area 1 to the sysop,
with subject "Subject".
- 55 -
┌────────────────────────────────────────────────────────────────┐
│ Function 43: CLEAR MARKED MESSAGES │
└────────────────────────────────────────────────────────────────┘
DATA: -
Clears all marked messages.
┌────────────────────────────────────────────────────────────────┐
│ Function 44: GLOBAL COMBINED BOARDS SELECTION │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to select or unselect all areas in his combined
boards selection.
┌────────────────────────────────────────────────────────────────┐
│ Function 45: DISPLAY TEXTFILE & WAIT │
└────────────────────────────────────────────────────────────────┘
DATA: <full filename>
Displays a textfile to the user, then waits for the user to press
<Enter>. The filename requires full path, name and extension.
┌────────────────────────────────────────────────────────────────┐
│ Function 46: CHANGE USER LEVEL AND/OR FLAGS │
└────────────────────────────────────────────────────────────────┘
DATA: [level] [flag +/-] [flag +/-] ...
Changes a user's level and/or flags. [level] can occur only once
in the parameter array, flags can be toggled on/off by specifying
the flag, followed by +/-.
Data example: 10 A+ C-
This would set the user's level to 10, set flag A and clear flag C.
- 56 -
┌────────────────────────────────────────────────────────────────┐
│ Function 47: MAKE A LOG ENTRY │
└────────────────────────────────────────────────────────────────┘
DATA: <log entry>
Writes <log entry> to PROBOARD.LOG, thus allowing the sysop to
customize his log.
┌────────────────────────────────────────────────────────────────┐
│ Function 48: SHOW HITPARADE │
└────────────────────────────────────────────────────────────────┘
DATA: <Mn>/<Kn>/<Tn>/<Un>/<Fn>/<Cn>/<On>
This functions returns an overview of the most active users in
several fields.
The 'n' with the parameters stands for the number of users to be
displayed in the hitparade. (unregistered versions default to 5)
M Best message-writers
K Best downloaders (Kb)
T Best downloaders (# downloads)
U Best uploaders (Kb)
F Best uploaders (# uploads)
C Best callers (# times called)
O Total time online
Data example: U15
- 57 -
┌────────────────────────────────────────────────────────────────┐
│ Function 49: SELECT MESSAGE AREA │
└────────────────────────────────────────────────────────────────┘
DATA: -
Lets the user select a new message area. This function is to be
used in cooperation with other message-related functions.
┌────────────────────────────────────────────────────────────────┐
│ Function 50: SHOW USERS ONLINE │
└────────────────────────────────────────────────────────────────┘
DATA: -
Displays who is online on the other nodes. Of course, you
understand that this function is useful only on multi-user systems.
To protect the sysop's health, it is possible not to show the
sysop's name here (Refer to the ProCFG section).
┌────────────────────────────────────────────────────────────────┐
│ Function 51: LIST LAST CALLERS │
└────────────────────────────────────────────────────────────────┘
DATA: <number of users to be displayed>
Gives an overview of the users that have most recently logged in
(for ALL the nodes). In the non-registered version, the number
of users shown is forced to 5.
┌────────────────────────────────────────────────────────────────┐
│ Function 52: REMOTE USER EDITOR │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows you to adjust a user's level (or even delete him), without
you having to be at the computer (VERY handy for co-sysops!).
- 58 -
┌────────────────────────────────────────────────────────────────┐
│ Function 53: MULTILINE CHAT (INTERNODE CHAT) │
└────────────────────────────────────────────────────────────────┘
DATA: [directory]
This is certainly the nicest function in ProBoard! This function
allows two users on different nodes to chat with each other
IN REAL TIME!!! You will actually see the other user type
(mistakes?), as if you were in chat-mode with the sysop. This is
UNlike other systems, where entire LINES are sent to the other
node.
User A on node X will have to specify the node he wants to chat
with, whereafter user B on node Y will be prompted if he wants
to chat.
If you specify a directory, ProBoard will use this directory to
read/write chat data. Useful if you have a RAM-disk. If no
directory is given, the system-directory will be used.
It is VERY (!VERY!) important that your system supports full file
& record locking to use this option. When you are not running a
LAN, you MUST install SHARE.EXE! ProBoard will definitely lock up
when SHARE.EXE is not installed on a stand-alone system.
┌────────────────────────────────────────────────────────────────┐
│ Function 54: SELECT FILE AREA │
└────────────────────────────────────────────────────────────────┘
DATA: <area selection>
Lets the user select a new file area. This function is to be used
in cooperation with other file-related functions. Refer to
functions 1 and 32 for more information.
- 59 -
┌────────────────────────────────────────────────────────────────┐
│ Function 55: SHOW .GIF FILE INFO │
└────────────────────────────────────────────────────────────────┘
DATA: <area selection>
Prompts the user for a .GIF-filename (wildcards allowed) and
displays resolution and number of colors for the file(s). The
files will be looked for in <area selection>. Refer to function 32
(Download) for more information.
┌────────────────────────────────────────────────────────────────┐
│ Function 56: TOGGLE IBM CHARACTERS │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to disable/enable extended IBM characters. When
disabled, all IBM-specific characters are converted to standard
ASCII characters ("+-|")
┌────────────────────────────────────────────────────────────────┐
│ Function 57: CHANGE PHONE NUMBER │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to change his phone number stored in his user
record.
┌────────────────────────────────────────────────────────────────┐
│ Function 58: CHANGE DATA/FAX PHONE NUMBER │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to change his data/fax phone number stored in his
user record.
- 60 -
┌────────────────────────────────────────────────────────────────┐
│ Function 59: CHANGE USER ALIAS │
└────────────────────────────────────────────────────────────────┘
DATA: -
Allows the user to change his alias. It is not allowed to use an
alias that is being used by another user.
┌────────────────────────────────────────────────────────────────┐
│ Function 60: EXECUTE PROBOARD EXECUTABLE (PEX FILE) │
└────────────────────────────────────────────────────────────────┘
DATA: <program> [data]
Loads & executes a ProBoard executable. The PEX file has to reside
in the PEX-directory (Specified in ProCFG).
┌────────────────────────────────────────────────────────────────┐
│ Function 61: BULLETIN MENU │
└────────────────────────────────────────────────────────────────┘
DATA: <filename> [prompt]
Displays <filename>.ANS/ASC (like function 5), and prompts the
user for a file suffix. This suffix is appended to <filename>, and
the file with the resulting filename is displayed. Obviously,
<filename> should not be longer than 7 characters.
The optional [prompt] parameters defines a prompt to be shown to
the user. For example: Enter a bulletin.
Data example: BULLET Enter a bulletin:
- 61 -
┌────────────┐
│ VII. USERS │
└────────────┘
The file USERS.PRO contains all the data about the users, such as
level, number of times called, combined boards access, messages
last read, etc. ...
User Editor
──────────────────────────────────────────────────────────────────
Working with the user editor is fairly easy. You can use the user
editor to search for, look at, and change a user's data. You
can edit users with the ProCFG utility. The editor activated by
Alt-E in ProBoard is identical to the one in ProCFG.
You can use the following keys in the user editor:
<PgUp> Go to the previous user-record.
<PgDn> Go to the next user-record.
<Ctrl-PgUp> Go to the first user-record.
<Ctrl-PgDn> Go to the last user-record.
<Alt-S> Search for a user-record. You may specify
whole or part of a user's name.
<Alt-N> Search for the next user-record complying to
the name specified with <Alt-S>.
<Alt-D> Toggle the 'deleted' flag of the current user.
<Alt-A> Add a new user
<F10> Opens a window containing statistical
parameters about the current user.
When you have found the user-record you were looking for, move
between the fields by using the arrow keys. To edit a field, just
move the selector to that field and begin editing straight away
(Insert is ALWAYS on).
A user-record has the following fields:
User Name User's name.
- 62 -
Password User's password.
City City the user lives in.
Country Country (or state) the user lives in.
Voice Phone # User's voice phone number (not
restricted to a certain layout).
Europeans hate the restrictions in
other BBS packages :-(
Data/Fax Phone # User's data or fax number (if any).
Level User's level (ranging from 0 to 32000).
A 0 means that the user has NO access
to the BBS.
Flags User's flags. Edit them by pressing
<Enter>, and then pressing any
character ranging from A to Z to toggle
that flag.
Loglevel The way in which the user will be
logged in the logfile (more about this
later).
Alias Each user can have a unique 'alias'
(nickname). In selected message areas,
the user can use this alias to write
messages or (if enabled) can login
using this alias.
Netmail credit Number of credits the user has left to
write Netmail messages.
Expiration Date When this date is specified (non-zero),
Expiration level the user's level will drop to the
given level when the expiration date
is reached.
Birth Date The date of birth of this user.
First Date The date of the user's first call to
the system.
Deleted If a user is set to deleted, his record
will be removed from USERS.PRO upon the
next user pack.
ANSI Should ANSI codes be sent to the user?
- 63 -
More? Pause after each screen?
Clearscreen Send clearscreen codes to the user?
Stacking Use command-stacking?
No-IBM Determines whether all the IBM-specific
characters should be filtered out and
converted to standard ASCII.
Fullscreen Editor Use the fullscreen message editor or
the internal line editor?
NoKill The user's record CAN NEVER be removed
from the userfile.
Ignore Download Does the user have UNLIMITED download
access?
Attention ProBoard will beep or play a song when
this user tries to log in.
In Tops If enabled, this user will be shown in
'tops' lists (function 48)
Loglevels
──────────────────────────────────────────────────────────────────
Each user has a certain loglevel, to determine how he/she will be
followed in ProBoard's logfile.
This can be useful if you suspect a user of loggin in using 2
different names. If you give those users a higher loglevel, you
can track their behaviour.
The following levels are possible:
Friend * NOTHING BUT login, logoff and errors
will be logged.
Normal * Login
* Logoff
* Errors
* Writing sysop messages
* Sysop paging
* Downloads
* Uploads
* Questionnaires
- 64 -
Suspicious * Everything from 'Normal'
* Reading messages
* Hitparades
* Last callers
* Graphics
Dangerous * Everything from 'Suspicious'
* ALL the movements between menus (this can
make the logfile HUGE)
- 65 -
┌──────────────────────────┐
│ VIII. ECHOMAIL & NETMAIL │
└──────────────────────────┘
ProBoard fully supports Echomail and Netmail, according to the
FTSC (FidoNet Technical Standards Committee) specifications.
Echomail
──────────────────────────────────────────────────────────────────
When a user enters a message in a message area configured as an
Echomail area, an origin line will be added to that message. This
origin line is obtained from the message area's configuration. If
there is no origin line specified for this message area, the
default origin line will be used (refer to the section about
'System parameters').
To import/export Echomail, you need an Echomail processor. No
such program is included, but as ProBoard uses the QuickBBS
message-base structure, a large number of Echomail processors
are available.
Great echomail-processors compatible with ProBoard are:
- QEcho
- ZmailQ
- TosScan
Netmail
──────────────────────────────────────────────────────────────────
A Netmail message (in short: Netmail) is a message that has a
fixed destination within the network. This destination is
defined by a node-number of the form "Zone:Net/Node.Point".
ProBoard will first find out whether this address exists, and
will then (if it exists) tell you the name of the node where
the Netmail is to be sent to.
When entering a node number in ProBoard, it is possible to look
up the nodes you want by entering a '?'.
eg: ? Shows a list of all zones.
2:? Shows a list of all nets and regions in zone 2.
2:292/? Shows a list of all nodes in net 2:292/
- 66 -
ProBoard needs a nodelist to use Netmail. This nodelist is
usually available on every node in the network. ProBoard
generates an index file for its own use (NODE_IDX.PRO) by running
PBUTIL NC.
For more information about PBUTIL's NC-option, please refer to the
section on PBUTIL.
To import and export Netmail, you need an external utility like
MAILSCAN ,MBUTIL or ZmailQ.
- 67 -
┌────────────┐
│ IX. PBUTIL │
└────────────┘
PBUtil is an extra utility that comes with the ProBoard package.
It takes care of all the maintenance a ProBoard system needs.
PBUtil is called with a parameter specifying the operation to be
executed:
PBUTIL <operation> [option]
Operations: MP Message Packer
MI Message Indexer
MK Message Killer
MR Messagebase Repair
ML Message Linker
UP Userfile Packer
UK User Killer (well ;-)
UI Userfile Indexer
US Userfile Sorter
FC File Counters
NC Nodelist Compiler
LR LASTREAD.BBS conversion
MU .MUS file player
PBUtil can be run from any directory!
- 68 -
[MP] Message Packer
──────────────────────────────────────────────────────────────────
Packs the message base. This means that the deleted messages are
effectively removed from the message base.
Specifying option -R will instruct the message packer to renumber
the message base. Renumbering the message base is done
automatically when the highest message number exceeds 25000.
Option -C cleans "garbage" from the messages, so compression
utilities will do a better job when compressing the messagebase.
Option -F forces the pack to be executed, even if there are no
deleted messages.
Lastread-pointers in the userfile will be adjusted when
renumbering.
Do NOT pack the messagebase when a user is online!!
[MI] Message Indexer
──────────────────────────────────────────────────────────────────
Recreates the messagebase index files. (MSGIDX.BBS,MSGTOIDX.BBS
and MSGINFO.BBS).
[MK] Message Killer
──────────────────────────────────────────────────────────────────
Deletes all messages specified in the message-area configuration.
Refer to the message-area configuration chapter for more
information.
[MR] Messagebase Repair
──────────────────────────────────────────────────────────────────
Scans the message-base for invalid/damaged messages, and deletes
them.
- 69 -
[ML] Message Linker
──────────────────────────────────────────────────────────────────
Completely rebuilds reply-chains in all areas. This operation has
to be performed when echomail is imported into the messagebase.
[UP] Userfile Packer
──────────────────────────────────────────────────────────────────
Removes all deleted users from USERS.PRO, except the users with
the NoKill flag set. Messed up user-records are also removed.
Specifying option -R instructs the user packer to reset all
Lastread-pointers to zero.
Do NOT pack the userfile when a user is online!!
[UI] Userfile Indexer
──────────────────────────────────────────────────────────────────
Creates an indexfile for the userfile. When ProBoard finds an
indexfile, it will search in this file. This will reduce the
time needed to locate a user at login.
[US] Userfile Sorter
──────────────────────────────────────────────────────────────────
Sorts USERS.PRO by level and name.
- 70 -
[UK] User Killer
──────────────────────────────────────────────────────────────────
Deletes certain users from USERS.PRO. The criteria are: not called
since a certain date, less than a certain number of times called
or a combination of these two.
Parameters to use:
-D<date> Removes all users that haven't called since
<date>. The format of <date> is DD-MM-YY or
MM-DD-YY (depending on the date-setup in ProCFG)
-C<calls> Removes all users that have called less than
<calls> times.
Combining these two parameters, will remove all users that have
called less than <calls> times BEFORE <date>. This option comes
in handy to remove all users that have called just once, but
without removing your new users!
Examples:
PBUTIL UK -C3 Removes all users that have called but
1 or 2 times.
PBUTIL UK -D01-01-90 Removes all users that haven't called
since Jan. 1st 1990.
PBUTIL UK -C2 -D01-02-90 Removes all users that have called
less than 2 times, but keeps the users
that have called after 01-02-90.
- 71 -
[FC] File Counters
──────────────────────────────────────────────────────────────────
After each download, ProBoard adds a line to the file DOWNLOAD.LOG.
This file's only purpose is to be used by the FC module of PBUtil.
FC reads the file DOWNLOAD.LOG and updates file counters in every
file listing, to keep up with the number of times every file
has been downloaded.
Specifying option -N<xx> instructs PBUtil to create a list of the
top-xx downloaded files. This list is named TOPFILES.ASC/ANS and
is stored in the textfiles-subdirectory. The number of files to be
written in this list is <xx>, (eg. -N15).
Specifying option -F instructs PBUtil to ALWAYS create
TOPFILES.ASC/ANS, even if DOWNLOAD.LOG is empty or doesn't exist.
Option -R rewrites all file-listings with the appropriate file-
count added to each file. This is useful when you added some
files.
The file counters will be placed before the description of the
files.
Eg. PB_100.ZIP [89] Superb new BBS program from Belgium !!!!
^^^^
File Counter
[NC] Nodelist Compiler
──────────────────────────────────────────────────────────────────
Reads a FidoNet-compatible nodelist and creates a ProBoard index-
file (NODE_IDX.PRO) in the system directory. This file will be
less than 10K in size, but your original nodelist has to stay in
the nodelist directory.
- 72 -
The compiler will look for the latest standard nodelist
(NODELIST.xxx) in the nodelist directory.
Specifying extra files as parameters instructs the nodelist
compiler to compile extra nodelists. Several extra nodelists can
be given as parameters.
Eg. PBUTIL NC MYLIST.LST PVT.LST
This would compile the latest NODELIST.xxx, MYLIST.LST and PVT.LST
in the standard nodelist directory.
To determine the costs of sending Netmail, a textfile will be read
that you will have to create. This textfile is called COST.PRO and
should be in ProBoard's system directory. The lines in this file
have the following format:
<Command> <Param1> [Param2]
Commands:
MYZONE <zone> All commands after this command act
on zone <zone>. You need at least
1 MYZONE command. If not, ProBoard
will assume you are in zone 2. This
is used to specify your own zone.
DEFAULT <cost> Defines the default Netmail cost.
ZONE <zone> <cost> Defines the Netmail cost for zone
<zone>.
REGION <region> <cost> Defines the Netmail cost for region
<region> within your own zone.
NET <net> <cost> Defines the Netmail cost for net
<net> within your own zone.
A simple example for a node in Belgium, where the BBS is part
of only ONE network.
MYZONE 2 I'm in zone 2
DEFAULT 100 Default = 100 credits
ZONE 3 50 Zone 3 = 50 credits (Australia)
ZONE 1 40 Zone 1 = 40 credits (North-America)
REGION 28 10 Region 28 = 10 credits (Netherlands)
REGION 29 0 Region 29 = FREE (Belgium)
NET 512 5 Net 512 = 5 (HCC Netherlands)
- 73 -
We give another example for a node which is part of 2 networks,
so this node has nodenumbers 2:292/1900 and 89:120/40
DEFAULT 100 Default = 100 credits
ZONE 1 50 Zone 1 = 50 credits
ZONE 2 20 Zone 2 = 20 credits
ZONE 3 70 Zone 4 = 70 credits
ZONE 89 10 My private network = 10 credits
MYZONE 2 Following definitions are for zone 2
REGION 29 1 Region 29 in zone 2 = 1 credit
NET 292 0 Net 292 in zone 2 = 0 credits
NET 512 5 Net 512 in zone 2 = 5 credits
MYZONE 89 Following definitions are for zone 89
REGION 12 2 Region 12 in zone 89 = 2 credits
NET 120 0 Net 120 in zone 89 = 0 credits
[LR] LASTREAD.BBS Conversion
──────────────────────────────────────────────────────────────────
This extracts the LASTREAD.BBS file from the ProBoard userfile, or
stores a LASTREAD.BBS file in the userfile.
The LASTREAD.BBS will be read/created in the CURRENT directory.
Two options can be used:
-X (Extract) Extracts the lastread-pointers from the user-
file and creates a QuickBBS/RA-compatible
LASTREAD.BBS file. This is useful if you
are using a messagebase-utility which needs
this file.
-S (Store) Extracts the lastread-pointers from the file
LASTREAD.BBS file and stores them in the
ProBoard userfile. Make sure the order of
the records in the userfile matches the order
of the records in LASTREAD.BBS.
-F (Forced) This is the same as '-S', but forces the
LASTREAD.BBS file to be stored in USERS.PRO,
even if the number of records in both files
do not match.
- 74 -
┌──────────────┐
│ X. REFERENCE │
└──────────────┘
Multi-user Operation
──────────────────────────────────────────────────────────────────
ProBoard gives you the possibility to have more than one user use
the userfile and the message base at the same time. ProBoard
doesn't do any internal multi-tasking to make the program act as
flexible as possible.
This makes sure that you can set up a multi-line BBS via a network
and multiple computers, or by running ProBoard under a
multitasking system. ProBoard has some code built in to run it as
efficiently as possible under DESQview. It is also compatible with
the new multitasking version of DR-DOS 5.0.
ProBoard can handle up to 255 nodes. Each node needs its own
directory, because ProBoard supports the use of an external
message editor. These editors were designed to be used on
single-node systems. Each node MUST be started from its own
private directory.
No ProBoard-related files have to be placed in this directory
(only the files needed for the external message editor).
If you want to install 3 nodes in a network, you could create
the following structure:
P:\PB\MSG Message base directory
P:\PB\TXTFILES Textfiles directory
P:\PB\MENUS Menus directory
P:\PB\PEX PEX files directory
P:\PB\NODE1 Start-up directory for node 1
P:\PB\NODE2 Start-up directory for node 2
P:\PB\NODE3 Start-up directory for node 3
- 75 -
ProBoard should be started from P:\PB\NODE1 for node 1, from
P:\PB\NODE2 for node 2, etc. These directories only require the
files for the external editor. All the other files that ProBoard
uses, should be stored in ProBoard's system directory.
If you run ProBoard under a multitasker, the different nodes will
run on different com-ports.
┌───────────┬────────────────────────────────────────────────────┐
│ IMPORTANT │ If you are running ProBoard multi-line using a │
├───────────┘ multitasker, the DOS program SHARE.EXE should be │
│ installed. │
└────────────────────────────────────────────────────────────────┘
Sysop Keys
──────────────────────────────────────────────────────────────────
While the user is on-line, the sysop can perform several actions,
by using the sysop keys:
Left/Right Lower/Raise the current user's level.
Only the levels configured in PROCFG
can be selected.
Up/Down Raise/Lower the current user's time
left. The time subtracted/added is
not restricted to this session!
Alt-C [Chat] Start a chat with the user. The chat
may be ended by pressing <Esc>.
Alt-J [Jump] Jump to DOS. If 'Swapping' was set to
'Yes' in PROCFG, the ProBoard session
will be swapped to disk or EMS, thus
making all memory available to the
DOS commands you want to execute.
You can return from the shell by
entering EXIT at the DOS prompt.
Alt-H [HangUp] Hangs up the phone, throwing the
user off-line immediately
(very unfriendly)!
Alt-L [LockOut] Hangs up the phone AND sets the
user's level to 0, thus making sure
he/she cannot log in any more
(very very unfriendly)!
- 76 -
Alt-N [NoChat] Makes ProBoard shut up during this
session.
Comes in VERY handy when you see the
user-that-ALWAYS-wants-to-chat is
logging in.
Alt-E [Edit] Allows you to edit the user
online. The editor is similar to
the editor in ProCFG.
(registered version only)
Alt-I [Image] Appends an image of the screen to
the file IMAGE.TXT in the ProBoard
system directory.
Ins Shows some information about the
user on-line (such as password,
flags, downloads, etc.).
F1 Shows a help-screen with all the
sysop keys available.
F2 Shows a help-screen with all the
sysop macros available. (registered
version only)
PgUp/PgDn Shows additional information about
the current user on the status line.
Home Shows the normal status line after
using PgUp/PgDn.
Furthermore, there are 10 programmable hotkeys (sysop macros).
They can be configured in ProCFG.
There are 2 kinds of sysop macros:
- Key macros : With this type of macro, it is possible to
assign many keystrokes to a single key.
When the macro key is pressed, all keys
specified will be passed to ProBoard, as if
you typed them yourself.
Special chars: '|' is replaced by <Enter>
'^' is replaced by <Esc>
- 77 -
- Shell macros : You can link any DOS command to a macro's hot-
key. A shell-definition MUST start with a '@'.
The string following the '@' should contain
the DOS command to be executed. You can,
of course, use the special shell options from
menu function 7.
Take this for an example:
Suppose you have set 'Swapping' to 'No' in
ProCFG. Should you, however, need ALL your
system memory in the shell, you could define
the following macro: @*C*N*Q*X (COMMAND.COM,
NoLog, NoMsg, Swapping).
Command line parameters & Errorlevels
──────────────────────────────────────────────────────────────────
PROBOARD.EXE accepts following command line parameters:
PROBOARD [-B<baud>] [-P<port>] [-N<node>] [-Q] [-X] [-M] [-V<mode>]
These parameters have the following meaning:
-B<baud> Specifies the communication baud rate.
-P<port> Specifies the communication com-port (1-8).
-N<node> This node's node number (1-255).
-Q Makes ProBoard shut up.
-X Tells ProBoard not to use EMS.
-V<mode> Runs ProBoard in video mode <mode>. This can be
useful if you have a monitor capable of displaying
132 columns, and you would like to run ProBoard in
such a mode (you will see an extra information
window on your screen if ProBoard is run in
132 cols mode)
-M Memory diagnostics mode. When using this switch,
ProBoard will display the amount of memory left,
the amount of memory used.
- 78 -
When no '-B<x>' parameter is given, ProBoard will be started in
local mode.
ProBoard returns an errorlevel when a user has logged off.
The errorlevels of PROBOARD.EXE are:
0 Everything OK, normal logoff.
1 FATAL error, something 'terrible' happened.
2 Not used.
3 Netmail entered by the user.
4 Echomail entered by the user.
5 Echomail AND Netmail entered by the user.
PB.EXE is the standalone (= no mailer) control program for
ProBoard.
PB.EXE accepts following command line parameters:
PB [-B<baud>] [-P<port>] [-N<node>]
These parameters have the following meaning:
-B<baud> Defines the modem's maximum baud rate.
-P<port> Defines the modem's com-port (1-8)
-N<node> This node's node number (1-255).
All other options are directly passed to PROBOARD.EXE
- 79 -
The errorlevels of PB.EXE are:
0 Everything OK.
1-5 Same as PROBOARD.EXE
99 <Esc> pressed.
100 Modem cannot be initialized.
Hard-coded ANS/ASC files
──────────────────────────────────────────────────────────────────
In certain situations, ProBoard will display some default ANS/ASC
files. If the .ANS file cannot be found, the .ASC file will be
displayed (if it exists).
You have to insert your own "Press [Enter] to continue" prompt if
necessary!
INTRO.ASC Displayed when a user logs in, BEFORE asking a
user's name and password.
GOODBYE.ANS/ASC Displayed when the user is logging off, just
before the carrier is dropped.
NEWUSER1.ANS/ASC Displayed when a new user is logging in,
BEFORE he/she has started the questionnaire.
NEWUSER2.ANS/ASC Displayed when a new user is logging in, AFTER
he/she has completed the questionnaire.
WELCOMEx.ANS/ASC Displayed at login, after the user entered
his/her name. The 'x' stands for a digit
ranging from 1 to 9; these files (if they
exist) will be displayed in ascending order,
1-2-...-9, BEFORE a mailcheck is done.
NEWS.ANS/ASC Displayed AFTER the user has read his new mail.
SECxx.ANS/ASC 'xx' stands for a userlevel. If a user with
level xx logs in, this file will be displayed
(eg. SEC25.ANS). The file is shown after all
WELCOME<x> files and before the mailcheck.
MAXPAGE.ANS/ASC Displayed when the user is trying to page the
sysop too many times.
- 80 -
PAGED.ANS/ASC Displayed when the sysop does not respond when
the user tries to page.
NOTAVAIL.ANS/ASC Displayed when the user tries to page outside
paging hours.
MSGHELP.ANS/ASC Replaces the built-in message reading help if
this file exists.
PRIVATE.ANS/ASC Is displayed when your system is configured
as a private system, and a new user tries
to log in.
EXP_WARN.ANS/ASC Displayed when the user's level expires within
< 30 days.
EXPIRED.ANS/ASC When a user's level has expired, this file is
shown.
TRASHCAN.ANS/ASC Shown when a user tried to use a name listed
in TRASHCAN.CTL
EVENTDUE.ANS/ASC Shown if a user can't login because of an
event that has to run soon.
BIRTHDAY.ANS/ASC If a user logs in on his/her birthday, this
file will be shown after the news file.
Note that you can run a pex-file to
congratulate a user with his birthday.
- 81 -
ANS/ASC Control codes
──────────────────────────────────────────────────────────────────
You can use several codes in ProBoard's textfiles. These codes
will be replaced by internal variables, or will perform special
actions.
In the code list, you will see a code's ASCII value, the control
code and a description of the code.
A '^' means Ctrl, so ^D means Ctrl-D.
┌───────┬──────┬─────────────────────────────────────────────────┐
│ ASCII │ CODE │ DESCRIPTION │
├───────┼──────┼─────────────────────────────────────────────────┤
│ 65 │ ^A │ Waits for the user to press <Enter>. │
│ 66 │ ^B │ Disables interruption by pressing <S>. │
│ 67 │ ^C │ Enables interruption by pressing <S>. │
│ 68 │ ^D │ Enables 'More'-prompt. │
│ 69 │ ^E │ Disables 'More'-prompt. │
│ 71 │ ^G │ Rings a bell on the user's computer. │
│ 76 │ ^L │ Clearscreen. │
│ 87 │ ^W │ Pauses for 1 second. │
└───────┴──────┴─────────────────────────────────────────────────┘
- 82 -
┌───────┬──────┬─────────────────────────────────────────────────┐
│ ASCII │ CODE │ DESCRIPTION │
├───────┼──────┼─────────────────────────────────────────────────┤
│ 06-65 │ ^FA │ User's full name. │
│ 06-66 │ ^FB │ User's City. │
│ 06-67 │ ^FC │ User's password. │
│ 06-68 │ ^FD │ User's data/fax phone number. │
│ 06-69 │ ^FE │ User's phone number. │
│ 06-71 │ ^FG │ Time of last login. │
│ 06-76 │ ^FL │ Netmail credit left. │
│ 06-77 │ ^FM │ Number of messages written. │
│ 06-78 │ ^FN │ Message last read. │
│ 06-79 │ ^FO │ User's level. │
│ 06-80 │ ^FP │ Number of calls by user. │
│ 06-81 │ ^FQ │ Number of uploads by user. │
│ 06-82 │ ^FR │ Kbytes uploaded by user. │
│ 06-83 │ ^FS │ Number of downloads by user. │
│ 06-84 │ ^FT │ Kbytes downloaded by user. │
│ 06-85 │ ^FU │ Number of minutes online today. │
│ 06-86 │ ^FV │ User's screen length. │
│ 06-87 │ ^FW │ User's first name. │
│ 06-88 │ ^FX │ ANSI codes ON/OFF. │
│ 06-89 │ ^FY │ Screen pausing ON/OFF. │
│ 06-90 │ ^FZ │ Clearscreen codes ON/OFF. │
│ 06-48 │ ^F0 │ Fullscreen editor ON/OFF. │
│ 06-49 │ ^F1 │ User Alias │
│ 06-50 │ ^F2 │ Command stacking ON/OFF. │
│ 06-51 │ ^F3 │ IBM Characters ON/OFF. │
│ 06-52 │ ^F4 │ User's country │
└───────┴──────┴─────────────────────────────────────────────────┘
- 83 -
┌───────┬──────┬─────────────────────────────────────────────────┐
│ ASCII │ CODE │ DESCRIPTION │
├───────┼──────┼─────────────────────────────────────────────────┤
│ 11-65 │ ^KA │ Total number of calls to the BBS. │
│ 11-66 │ ^KB │ Name of the last user on the BBS. │
│ 11-67 │ ^KC │ Number of active messages. │
│ 11-68 │ ^KD │ Number of first message. │
│ 11-69 │ ^KE │ Number of last message. │
│ 11-70 │ ^KF │ Number of times user has paged the sysop. │
│ 11-71 │ ^KG │ Day of the week (full). │
│ 11-72 │ ^KH │ Number of users on the BBS. │
│ 11-73 │ ^KI │ Current time. │
│ 11-74 │ ^KJ │ Today's date. │
│ 11-75 │ ^KK │ Minutes online during this session. │
│ 11-77 │ ^KM │ Minutes online today. │
│ 11-79 │ ^KO │ Minutes online left today. │
│ 11-80 │ ^KP │ Version number of ProBoard (x.xx) │
│ 11-81 │ ^KQ │ Daily online limit. │
│ 11-82 │ ^KR │ Baud rate. │
│ 11-83 │ ^KS │ Day of the week (short). │
│ 11-84 │ ^KT │ Daily download limit (Kbytes). │
│ 11-87 │ ^KW │ Node number. │
│ 11-88 │ ^KX │ Hang up phone. │
│ 11-89 │ ^KY │ Active message area name. │
│ 11-90 │ ^KZ │ Active file area name. │
│ 11-48 │ ^K0 │ # Messages in active message area │
│ 11-49 │ ^K1 │ Current message area # │
│ 11-50 │ ^K2 │ Current file area # │
└───────┴──────┴─────────────────────────────────────────────────┘
You can also inform ProBoard about the length of a string to be
placed in a textfile. This is done is the following way:
Between the first and last code, you can place '@' or '#' codes.
The field's length will be defined by the number of characters,
first and last control code included. Use '@' to align (justify)
a field to the left, use '#' to align to the right.
Eg. ^K@@@@@@@@@@@@@@@@@@@@@@@B
^^^^^^^^^^^^^^^^^^^^^^^
23 X '@'
Thus, the total amount of characters equals 25, the user's name
(^KB) will be placed in a 25-character field, left justified. You
now can easily draw 'boxes' around this field, without having to
worry about the actual length of the user's name.
- 84 -
An example of a textfile using the control codes: (the '^' stands
for '^F') :
┌───────────┐
│ Some Info │
└───┬───────┴───────────────────────────────────────────────────┐
│ Your full name..... ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A │
│ Calling from....... ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B │
│ Last called........ ^@@@@@@@@@F at ^@@@@@@G │
│ Level.............. ^####O │
│ Number of calls.... ^####P │
├──────────────────────────────┬────────────────────────────┤
│ Kb downloaded...... ^@@@@TK │ Kb uploaded....... ^####RK │
│ # downloads........ ^####S │ # uploads......... ^####Q │
├──────────────────────────────┴────────────────────────────┤
│ Messages posted.... ^####M │
│ Your flags......... ^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H │
├─────────────────┐ │
│ ANSI ^#X ├─────────────────────────────────────────┘
│ Clearscreen ^#Z │
│ More prompt ^#Y │
│ Editor ^#O │
└─────────────────┘ Press <Enter> to continue.^A
Music Files
──────────────────────────────────────────────────────────────────
You can make your paging-sound and attention-sound more attractive
by defining your own musicfile. A musicfile is a text file in
which you can use 2 keywords:
TONE [hz] [1/100's sec] Sounds a tone of [hz] Hz during
the specified period.
WAIT [1/100's sec] Waits for the specified period.
The format of this textfile is compatible with the Remote Access
musicfiles.
The paging-musicfile is named PAGE.MUS, and the attention-music-
file is named ATTEN.MUS.
- 85 -
You can use this frequency-table to write your own masterpiece:
┌──────┬─────┬─────┬──────┬──────┬──────┐
│ O.1 │ O.2 │ O.3 │ O.4 │ O.5 │ O.6 │
┌────┼──────┼─────┼─────┼──────┼──────┼──────┤
│ C │ 45 │ 134 │ 268 │ 536 │ 1071 │ 2145 │
│ C# │ 71 │ 142 │ 284 │ 568 │ 1136 │ 2273 │
│ D │ 75 │ 150 │ 301 │ 602 │ 1204 │ 2408 │
│ D# │ 80 │ 159 │ 319 │ 638 │ 1275 │ 2551 │
│ E │ 84 │ 169 │ 338 │ 676 │ 1351 │ 2703 │
│ F │ 90 │ 179 │ 358 │ 716 │ 1432 │ 2864 │
│ F# │ 95 │ 190 │ 379 │ 758 │ 1517 │ 3034 │
│ G │ 100 │ 201 │ 402 │ 804 │ 1607 │ 3215 │
│ G# │ 106 │ 213 │ 426 │ 851 │ 1703 │ 3406 │
│ A │ 113 │ 225 │ 451 │ 902 │ 1804 │ 3608 │
│ A# │ 119 │ 239 │ 478 │ 956 │ 1991 │ 3823 │
│ B │ 127 │ 253 │ 506 │ 1012 │ 2025 │ 4050 │
└────┴──────┴─────┴─────┴──────┴──────┴──────┘
Text Macros
──────────────────────────────────────────────────────────────────
You can enter text macros in any user-definable string. Text
macros are defined as "@<NAME>@", and are replaced by internal
ProBoard variables at runtime.
You can insert these macros in the following strings:
- Textlines in menu items
- Data fields in menu items
- Menu prompts
- "Yelling" message for the yell menu function
- "Shelling" message for the shell menu function
- 86 -
Here is a list of the available macros:
BAUD Current baud rate
CITY The city of the current user
COUNTRY User's country/state
CURFILEAREA Current file area name
CURFILEAREA# Current file area number
CURMENU Current menu name
CURMSGAREA Current message area name
CURMSGAREA# Current message area number
DATAPHONE User's data phone number
DATE Current date (xx-xxx-xx)
FIRSTNAME The first name of the current user
HANDLE The user's handle (fixed alias)
HIGHMSG Highest message number in message base
ID The user level ID for this user
LASTDATE Date of user's last call
LASTTIME Time of user's last call
LEVEL The level of the current user
LOWMSG Lowest message number in message base
MNUDIR Menu directory
MSGDIR Messagebase directory
NAME The name of the current user
NLDIR Nodelist directory
NODE Current node number
NUMMSG Number of messages in current area
NUMUSERS Total number of users in userfile
NUMYELLS The number of times the user yelled
PASSWORD The user's password
PEXDIR PEX-files directory
PORT Current com-port nr (1-8)
PVTDIR Private uploads directory
STARTDIR Startup-directory
SYSDIR ProBoard system directory
SYSOPNAME Name of the sysop
TIME Current time (xx:xx)
TMLEFT Number of minutes left
TMONLINE Number of minutes online
TOTALCALLS Total number of calls to the system
TOTALMSG Total number of messages in message base
TXTDIR Textfiles directory
UPDIR Upload directory
USERREC Record number of this user's user record
VERSION ProBoard version number (eg 1.16)
VOICEPHONE User's voice phone number
- 87 -
#1 - #7 Change color (only valid for displayable
#B1 - #B7 strings). If a 'B' is in front of the color
number, the "blink" attribute will be turned
on.
1 = Red
2 = Green
3 = Yellow
4 = Blue
5 = Magenta
6 = Cyan
7 = White
Example: Hi @<#3>@@<FIRSTNAME>@@<#7>@, how is the weather in @<CITY>@?
Example batch files
──────────────────────────────────────────────────────────────────
This is an example for standalone-operation with 2 errorlevel
events defined. Event 1 returns level 10, event 2 returns level
20. No echomail and netmail is used.
------------------------------------------------------------------
:Loop
PB
if errorlevel 100 goto FatalError
if errorlevel 99 goto End
if errorlevel 20 goto Event2
if errorlevel 10 goto Event1
if errorlevel 1 goto FatalError
goto Loop
:Event1
echo Perform some actions
echo --------------------
goto Loop
:Event2
echo Perform some more actions
echo -------------------------
goto Loop
:FatalError
echo FATAL ERROR - ProBoard Down
:End
------------------------------------------------------------------
- 88 -
Using ProBoard with a frontend-mailer is a little more
complicated. This is an example for use with FrontDoor.
In this example FrontDoor uses the following errrolevels:
300 bps call : 50
1200 bps call : 51
2400 bps call : 52
Local call : 60
Mail received : 100
Exit : 150
------------------------------------------------------------------
SET FD=C:\FD
:Loop
cd \fd
fd
if errorlevel 150 goto End
if errorlevel 100 goto MailRcv
cd\pb
if errorlevel 60 goto Local
if errorlevel 52 goto Call2400
if errorlevel 51 goto Call1200
if errorlevel 50 goto Call300
:FatalErr
echo FATAL ERROR
goto End
:Call300
proboard -b300 -p1
goto CheckPBErr
:Call1200
proboard -b1200 -p1
goto CheckPBErr
:Call2400
proboard -b2400 -p1
goto CheckPBErr
:Local
proboard
- 89 -
:CheckPBErr
if errorlevel 5 goto NetEcho
if errorlevel 4 goto EchoEntered
if errorlevel 3 goto NetEntered
if errorlevel 1 goto FatalErr
goto Loop
:NetEcho
REM ************************************
REM ** Export netmail & echomail here **
REM ************************************
Goto Loop
:NetEntered
REM ************************************
REM ** Export netmail here **
REM ************************************
Goto Loop
:EchoEntered
REM ************************************
REM ** Export echomail here **
REM ************************************
Goto Loop
:MailRcv
REM ************************************
REM ** Unpack and Import mail here **
REM ************************************
Goto Loop
:End
------------------------------------------------------------------
- 90 -
┌──────────────────────────────┐
│ XI. SOFTWARE DEVELOPMENT KIT │
└──────────────────────────────┘
Included with ProBoard is a C library that allows you to write
your own extensions to ProBoard in C or C++. All you need is an
ANSI-compatible C or C++ compiler. The programs you create can be
run within ProBoard by executing a new menu function.
The ProBoard SDK files included with ProBoard are free software,
so anyone who does not use ProBoard to run a BBS on a regular
basis, but wants to write extension files, is allowed to do so
without registering ProBoard. You can distribute any ProBoard
extension files (PEX files) royalty-free. As far as we are
concerned, any program you develop with the ProBoard SDK is your
property.
Requirements
──────────────────────────────────────────────────────────────────
To create your own programs you need:
- An ANSI compatible C or C++ compiler. Compilers known to be
compatible with the ProBoard SDK are:
- Zortech C/C++ 2.0 - 3.0
- Microsoft C 5.1 - 6.0
- Borland C++ 2.0
- Turbo C++ 1.0
- Turbo C 1.0 - 2.0
Other compilers may work too, but were not tested.
- An MS-compatible linker (usually the one that came with your
compiler).
Linkers known to work with the ProBoard SDK are:
- All Microsoft Linkers (LINK.EXE)
- Borland's Turbo Link (TLINK)
- Zortech's BLINK
- The ProBoard SDK include file PB_SDK.H
- The ProBoard SDK library PB_SDK.LIB
- 91 -
Creating ProBoard Executables (PEX-files)
──────────────────────────────────────────────────────────────────
To create your own ProBoard executable (.PEX file), you first
create a source file, say MYPROG.C. When ProBoard loads a PEX
file, it executes the function main() in your program. This
function is defined as:
main(int argc,char *argv[])
{
...
return 0;
}
The parameters 'argc' & 'argv' contain optional data that can be
given to your program at load time (exactly like C's argc and argv
parameters). Creating this main() function is the only thing you
need to do to write a valid ProBoard executable. You have to make
sure to return 0 from main()! From this point on, it's just like
writing a regular C program. Most of the ANSI standard library
functions are available, plus many ProBoard-specific functions and
global variables, used for interfacing between your program and
the ProBoard environment. As in a regular executable, you can
build your program from several source files.
This is a tiny sample ProBoard program:
#include "pb_sdk.h"
main()
{
printf("You have %d minutes left.\n",TimeLeft());
AddTime(10);
printf("Now you have %d minutes left.\n",TimeLeft());
return 0;
}
Included with ProBoard are a few example programs (in source form
of course).
- 92 -
Compiling and linking
──────────────────────────────────────────────────────────────────
ProBoard executables have to be compiled using the LARGE memory
model.
For example (Turbo C++) : tcc -c -ml myprog.c
Once you have your .OBJ file (in this case MYPROG.OBJ), you have
to link it with the ProBoard SDK library (PB_SDK.LIB). You have to
specify a filename as output filename. The linked executable must
have extension .PEX. It is important to disable linking of the
default compiler libraries!! It is also recommended to turn on
case sensitivity.
e.g. Turbo C++ : TLINK MYPROG,MYPROG.PEX,,PB_SDK /N /C
Microsoft : LINK MYPROG,MYPROG.PEX,,PB_SDK /NOD /NOI;
Zortech : BLINK MYPROG,MYPROG.PEX,,PB_SDK /NOD /NOI;
That's all there is to it. Now you can run your program through
ProBoard menu function 60.
I will now give the compiler syntax for some popular compilers:
Zortech C/C++ : ztc -c -a -ml myprog.c
Microsoft C : cl -Zep -Gs -c -AL myprog.c
Turbo C/C++ : tcc -c -ml myprog.c
Borland C++ : bcc -c -ml myprog.c
And linker syntax:
Borland : TLINK MYPROG,MYPROG.PEX,,PB_SDK /N /C
Microsoft : LINK MYPROG,MYPROG.PEX,,PB_SDK /NOD /NOI;
Zortech : BLINK MYPROG,MYPROG.PEX,,PB_SDK /NOD /NOI;
Restrictions
──────────────────────────────────────────────────────────────────
There are few restrictions in writing ProBoard executables. For C
programs there are actually only two major restriction: long math
& floating point operations.
- 93 -
Due to the fact that all compilers generate function calls to
multiply, divide and shift long integers, and that every compiler
vendor uses its own array of functions, it is impossible to
include these functions in the ProBoard SDK. As a result, it is
not directly possible to perform these operations on long values
(eg. long1 = long2 * long3). However, we did include functions to
perform these operations, but you will have to call these
functions explicitly (eg. long1 = l_mul(long2,long3)). People who
know their compiler well, can work around this problem by
extracting the long math functions from the standard library, and
linking them with the PEX file. For example, the long math
functions used by the Zortech compiler are in the module
LMATH.OBJ, located in the library ZLC.LIB. Extracting this module
is as simple as : LIB ZLS *LMATH;
These are the ProBoard long math functions that you can use:
long l_mul(long1,long2) Multiply 2 long values = long1 * long2
long l_div(long1,long2) Divide 2 long values = long1 / long2
long l_mod(long1,long2) Modulo of 2 long values = long1 % long2
long l_shl(long1,int1) Left shift a long value = long1 << int1
long l_shr(long1,int1) Right shift a long value = long1 >> int1
The functions l_div(), l_mod(), l_shl() and l_shr() are also
available for unsigned long values: ul_div(), ul_mod(), ul_shl()
and ul_shr().
Floating point operations are NOT supported. So it is not possible
to use 'double' and 'float' variables & constants.
Another major restriction only affects C++ programs. In a ProBoard
C++ program, you can't declare global variables that have
constructors or destructors (ie. no static
constructors/destructors). So this will compile fine, but will
certainly crash your machine:
class myclass
{
int a;
public:
x() { .... some action .... }
~x() { .... some action .... }
};
myclass some_global_object;
main()
{
...
}
- 94 -
You can, however, use objects with constructors and destructors,
as long as they are declared within a function. So this would
work:
main()
{
myclass some_local_object;
....
}
Library functions supported
──────────────────────────────────────────────────────────────────
Almost all standard library functions are supported. Note that all
functions that write to the standard output device (printf,
putchar,...) write their output to the ProBoard window and to the
user (through the modem). Functions that read from the standard
input device and from the keyboard are NOT supported.
(scanf,getch,gets,...) We provide substitutes for these functions.
Functions supported:
fopen , freopen , fseek , ftell , fgets , fgetc , fflush
fclose , fputs , getc , getchar , gets , fputc , putc ,
putchar , puts , fread , fwrite , printf , fprintf ,
vfprintf , vprintf , sprintf , vsprintf , setbuf ,
setvbuf , remove , rename , rewind , clearerr , feof ,
isalpha , iscntrl , isdigit , isgraph , islower ,
isprint , ispunct , isspace , isupper , isxdigit ,
toupper , tolower , int86x , intdos , intdosx ,
dos_findfirst , dos_findnext , write , open , creat ,
close , unlink , chsize , dup , dup2 , lseek , access ,
filesize , filelength , isatty , atoi , atol , strtol ,
rand , srand , calloc , free , malloc , realloc ,
getenv , bsearch , qsort , abs , labs , memcpy , memmove ,
strcpy , strncpy , strcat , strncat , memcmp , strcmp ,
strncmp , memchr , strchr , strcspn , strpbrk , strrchr ,
strspn , strstr , strtok , memset , strlen , memicmp ,
stpcpy , strcmpl , strnicmp , strdup , strlwr , strupr ,
strnset , strrev , strset , swab , strncmpl , strnicmp ,
clock , time , mktime , asctime , ctime , localtime ,
gmtime , strftime , sleep , usleep , msleep , difftime
For information on these functions, consult your compiler's
library reference manual.
- 95 -
In the string output functions (printf and puts), you can use the
following control codes in your string:
\001 or \x01 Set output color to red
|| ||||
|| ||||
\007 or \x07 Set output color to white
\x11 to \x17 Same as \1 to \7, but blinking colors
\t Stops output of string until user presses [Enter]
\f Clears the user's screen
NOTE: Do NOT include any standard include files from your
compiler. The only include file you can use is PB_SDK.H.
THAT'S IT!!
- 96 -
ProBoard interface functions
──────────────────────────────────────────────────────────────────
This is a list of all the functions that can be used to interface
with ProBoard.
Several types have been defined in the file PB_SDK.H
bool : a boolean value that can have the values TRUE or FALSE
byte : an unsigned character (8 bits)
KEY : used for key scan codes (for sysopkey handlers and the
ScanKey() function).
------------------------------------------------------------------
void AddTime(int min);
------------------------------------------------------------------
Adds 'min' minutes to the user's time left. If 'min' is negative, the
number of minutes will be subtracted from the time left.
Examples: AddTime(10); /* Adds 10 minutes */
AddTime(-5); /* Subtracts 5 minutes */
------------------------------------------------------------------
int TimeLeft(void);
------------------------------------------------------------------
Returns the time left in minutes for the current user.
------------------------------------------------------------------
int TimeOnline(void);
------------------------------------------------------------------
Returns the time in minutes that the current user is online.
------------------------------------------------------------------
void SuspendTimer(void);
------------------------------------------------------------------
Suspends the online-timer for the current user. No time will be
subtracted until RestartTimer() is called.
- 97 -
------------------------------------------------------------------
void RestartTimer(void);
------------------------------------------------------------------
Restarts the timer after a call to SuspendTimer().
------------------------------------------------------------------
void AdjustTime(void);
------------------------------------------------------------------
Call this function if you changed the user's level. This
recalculates all limits (time,download,...).
------------------------------------------------------------------
void MsgEd(void);
------------------------------------------------------------------
Fires up the internal message editor or the fullscreen editor,
depending on the settings of the user. The message will be stored
in the file MSGTMP in the current directory. If a message is
aborted, the file MSGTMP will be deleted by the message editor.
If you create a MSGTMP file before invoking the message editor,
this file will be used as a 'quote' message.
------------------------------------------------------------------
int PostMessage(char *from,char *to,char *subject,int area,
bool pvt);
------------------------------------------------------------------
Posts a message to a user.
from = Name of the sender
to = Name of the user you're sending the message to
subject = Subject of the message
area = Message area number where the message has to
be posted in.
pvt = Private status (TRUE=private, FALSE=public)
No checking is performed on any of the parameters!
Return value: -1 on error
0 if ok
- 98 -
------------------------------------------------------------------
int PostNetmail(char *from,char *to,char *subject,int area,
FIDO_NODE *address,bool attach,bool crash,
bool kill);
------------------------------------------------------------------
Posts a netmail message.
from = Name of the sender
to = Name of the user you're sending the message to
subject = Subject of the message
area = Message area number where the message has to
be posted in
address = Destination node number of this message.
attach = TRUE for a file attach message
crash = TRUE if this message is a crashmail message
kill = TRUE if the message has to be deleted after it is
sent
FIDO_NODE is a structure with the following fields:
struct
{
unsigned zone; /* Zone number */
unsigned net; /* Net number */
unsigned node; /* Node number */
unsigned point; /* Point number */
}
No checking is performed on any of the parameters!
Return value: -1 on error
0 if ok
- 99 -
------------------------------------------------------------------
int ReadMsgArea(int area,MSGAREA *ma);
------------------------------------------------------------------
Reads data about a message area.
area = Message area number (1-200)
ma = Pointer to a MSGAREA structure to be filled
Check the file PB_SDK.H for details about the MSGAREA structure
definition.
Return value: -1 if not defined
0 if read ok
------------------------------------------------------------------
int ReadMessage(MESSAGE *msg,int msgnum);
------------------------------------------------------------------
Reads message number <msgnum> into the MESSAGE structure. To
access the text of the message, use the function
CreateMessageText().
See the file PB_SDK.H for a description of the MESSAGE structure.
Return value: -1 if the message does not exists
0 if the message is read ok
------------------------------------------------------------------
void WriteMSGTMP(char *text);
------------------------------------------------------------------
Writes the string <text> to the file MSGTMP. The file is always
recreated when using this function. To append text to MSGTMP,
use the function AppendMSGTMP(). You have to insert your own CR/LF
pairs in the text if you want to force a newline. Lines can be
longer than 80 characters. The message processing functions will
do a word-wrap if necessary. Do NOT insert a single CR or LF in
the text. (\r or \n).
------------------------------------------------------------------
void AppendMSGTMP(char *text);
------------------------------------------------------------------
Same as WriteMSGTMP(), but adds text to an EXISTING file.
- 100 -
------------------------------------------------------------------
void ShowMessage(MESSAGE *msg);
------------------------------------------------------------------
Shows the message <msg> to the user, including header and message
text.
See the file PB_SDK.H for an description of the MESSAGE structure.
------------------------------------------------------------------
void CreateMessageText(MESSAGE *msg);
------------------------------------------------------------------
Reads the text that belongs to message <msg>, and stores it in a
file called MSGTMP in the current directory. This file can then be
accessed as an ordinary textfile.
------------------------------------------------------------------
int FirstMessage(MESSAGE *msg,int area,int order,int first);
int MextMessage(MESSAGE *msg,int area,int order);
------------------------------------------------------------------
These functions are used to read messages in forward or reverse
order. To start scanning messages, you have to call the
FirstMessage() function first, and the NextMessage() function to
read more messages.
msg = MESSAGE structure where the message has to be stored.
area = area number to read messages in (0 = all areas)
order = 1 for forward order, -1 for reverse order
first = message to start reading from. This message does NOT
need to exist. The first non-deleted message following
this message will be read first.
See the file PB_SDK.H for an description of the MESSAGE structure.
Return value: -1 No more messages found.
>0 Message number of message found.
- 101 -
This is an example on how to use these functions:
result = FirstMessage(msg,0,+1,1);
while(result >= 0)
{
/* Do something with the message */
result = NextMessage(msg,0,+1);
}
------------------------------------------------------------------
void DeleteMessage(MESSAGE *msg);
------------------------------------------------------------------
Deletes message <msg>.
------------------------------------------------------------------
void MarkMessage(int msgnum);
------------------------------------------------------------------
Marks message number <msgnum> for later retrieval. Up to 200
messages can be marked.
------------------------------------------------------------------
void ReadMarkedMessages(void);
------------------------------------------------------------------
Shows all marked messages to the user, with the option to wait
after each message. If the user selected to wait after each
message, the standard message options menu will be shown to the
user. (Next,Prev,Stop,...).
In fact, this function is identical to menu function "Read
Messages", with the user selecting "Marked".
------------------------------------------------------------------
void ListMarkedMessages(void);
------------------------------------------------------------------
Is similar to ReadMarkedMessages(), but this function acts as a
"QuickScan Messages" with the user selecting "Marked".
- 102 -
------------------------------------------------------------------
void UnMarkAllMessages(void);
------------------------------------------------------------------
Unmarks all messages that were previously marked. You have to call
this function before marking any messages, because the list of
marked messages is remembered until a user logs off.
------------------------------------------------------------------
IO_... functions
------------------------------------------------------------------
All functions starting with IO_ are low-level functions to access
the communication ports directly. Do NOT use these functions for
ordinary I/O operations. They are intended for writing file
transfer protocols. See the file PB_SDK.H for a description of
these functions.
------------------------------------------------------------------
char WaitKey(void);
------------------------------------------------------------------
Waits for a character to be read from the modem or local keyboard.
Return value: the character read.
------------------------------------------------------------------
char WaitKeys(char *keylist);
------------------------------------------------------------------
Waits for any character specified in <keylist>.
Return value: the key from the list that was pressed (converted to
uppercase if the key is a letter).
Example : c = WaitKeys("ABC\r\x1b");
/* Waits for A,B,C,<Enter> or <Esc> */
- 103 -
------------------------------------------------------------------
void Input(char *buf,int len,int readmode);
------------------------------------------------------------------
Asks for a string from the user. The string is stored in <buf>,
and the user will not be allowed to enter more than <len>
characters.
<readmode> : INPUT_ALL : All characters are allowed
INPUT_UPFIRST : First character of each word is
converted to uppercase.
INPUT_UPALL : All characters are converted to
uppercase.
INPUT_DIGITS : Only digits are accepted.
INPUT_NOFIELD : OR together with any of the
previous modes if you don't want an
input-field to be displayed.
------------------------------------------------------------------
bool Ask(bool default);
------------------------------------------------------------------
Asks for a Yes or No response from the user. Pressing 'Y' returns
TRUE and outputs "Yes". Pressing 'N' returns FALSE and sends "No"
to the user. Pressing <Enter> returns <default>, and sends "Yes"
or "No", depending on <default>.
------------------------------------------------------------------
char PeekChar(void);
------------------------------------------------------------------
Checks if a character is available in the input buffer, and
returns that character if there is.
Return value: 0 if no character available
!= 0 the character read (key pressed by user)
- 104 -
------------------------------------------------------------------
void SetColor(char color);
------------------------------------------------------------------
Changes the current output color. All text that is output after
this function is called will be displayed in the specified color.
<color> can be one of the following:
BLACK , RED , GREEN , YELLOW , MAGENTA , BLUE , CYAN , WHITE
------------------------------------------------------------------
void EnableStop(void);
void DisableStop(void);
bool Stopped(void);
------------------------------------------------------------------
Enables stopping of output by pressing 'S'. When enabled, a user
can press 'S' to stop incoming text. When this happens, any
string output function will immediately return to the caller, en
the function Stopped() will return TRUE to indicate that the user
requested to stop output.
EnableStop() Enables this feature and sets the "stopped"
status to FALSE .
DisableStop() Disables the stop feature.
Stopped() Returns the "stopped" flag (TRUE or FALSE).
Example:
EnableStop();
for(i=0;i<100;i++)
{
printf("...something...");
if(Stopped()) break;
}
- 105 -
------------------------------------------------------------------
char ShowHotkeyFile(char *filename,char *hotkeys);
------------------------------------------------------------------
Shows the file <filename> to the user, and watches for incoming
keys that are specified in <hotkeys>. If one of these keys is
detected, the function stops output, and returns the hotkey. The
"stop" feature will be enabled when sending the file.
Return value: 0 : File sent completely and no hotkeys pressed.
1 : 'S' pressed (output stopped)
2 : File not found
!=2 : Hotkey detected
------------------------------------------------------------------
char ShowHotkeyANSIFile(char *filename,char *hotkeys);
------------------------------------------------------------------
This function is identical to ShowKotkeyFile(), except for the
fact that no extension and path can be specified. Depending on the
setting of the user, <filename>.ANS/ASC in the textfiles
directory will be sent. If no .ANS file is found, it will try to
send the .ASC file. If that fails too, 2 will be returned.
Return value: 0 : File sent completely and no hotkeys pressed.
1 : 'S' pressed (output stopped)
2 : File not found
!=2 : Hotkey detected
------------------------------------------------------------------
void InitLineCounter();
bool LineCounter();
------------------------------------------------------------------
These functions are used to support page pausing ("More Y/N").
Calling InitLineCounter() initializes the line counter to 0.
Every time you call LineCounter(), the line counter is incremented
by one. If the counter reaches the screen length, the user will be
asked if he wants to continue reading. If he selects "No", the
LineCounter() function will return FALSE.
- 106 -
Example:
InitLineCounter();
for(;;)
{
printf("...something...\n");
if(!LineCounter()) break;
}
------------------------------------------------------------------
int ReadUser(USER_REC *rec,int recnr);
------------------------------------------------------------------
Reads user record number <recnr> (0-...) from the user file and
stores it in <rec>.
Return value: -1 if record does not exist.
0 if record is read ok.
------------------------------------------------------------------
void WriteUser(USER_REC *rec,int recnr);
------------------------------------------------------------------
Writes user record <rec> to record number <recnr> in the userfile.
------------------------------------------------------------------
char PlayMusic(char *filename,char *hotkeys);
------------------------------------------------------------------
Plays a .MUS file. The file has to be located in the ProBoard
system directory. Do not include a path and extension in
<filename>. The music can be stopped if the sysop presses one of
the keys specified in <hotkeys>. ^^^^^
Return value: 0 Music file played till the end
1 Music file not found
>1 The hotkey pressed by the SYSOP
^^^^^
- 107 -
------------------------------------------------------------------
void PostInfo(char *filename);
------------------------------------------------------------------
Does exactly the same as the POSTINFO statement in a .Q-A file.
No path and extension is allowed in <filename>. The file were the
information will be written to will have the extension .ASW and
will be placed in the ProBoard system directory.
------------------------------------------------------------------
int ReadFileArea(int areanum,FILEAREA *fa);
------------------------------------------------------------------
Reads information about file area number <areanum> in the <fa>
structure.
Check the file PB_SDK.H for details about the FILEAREA structure.
Return value: -1 File area does not exist
0 Ok
------------------------------------------------------------------
void MenuFunction(int function,char *data);
------------------------------------------------------------------
Executes menu function <function> with <data>. For details, see
the menu functions description in this file.
There are named constants declared for each function in the file
PB_SDK.H. It is recommended that you use these constants instead
of numbers.
------------------------------------------------------------------
void Log(int loglevel,char *fmt,...);
------------------------------------------------------------------
With this function you can write information to the ProBoard
logfile. The log entry will be written if the user has a loglevel
that is greater than <loglevel> .
<loglevel> can be one of the following:
LOG_FRIEND , LOG_NORMAL , LOG_SUSPICIOUS , LOG_DANGEROUS
If you want a log entry to be written regardless of the user's
loglevel, use LOG_FRIEND.
- 108 -
The Log() function works like the printf function: you can use
format specifiers in the <fmt> string, and pass extra parameters.
Example: Log(LOG_NORMAL,"User's name = %s",CurUser->name);
------------------------------------------------------------------
void HangUp();
------------------------------------------------------------------
Hangs up the phone, logging off the user. It is exactly the same
as pressing Alt-H.
------------------------------------------------------------------
bool CheckAccess(int level,long flags);
------------------------------------------------------------------
Checks if the current user can access something that requires
<level> and <flags>. Returns TRUE if the user has access, FALSE if
not.
------------------------------------------------------------------
KEY ScanKey(void);
------------------------------------------------------------------
Checks the LOCAL keyboard for a key, and returns the scan code for
that key. If no key is available, 0 will be returned.
For a list of defined values for scan codes, check the file
PB_SDK.H.
- 109 -
------------------------------------------------------------------
bool GetFlag(long flags,char flagchar);
void SetFlag(long flags,char flagchar);
void ClearFlag(long flags,char flagchar);
------------------------------------------------------------------
Access flags are stored in a long integer (32 bits). You have 3
macros at your disposal to manipulate access flags:
GetFlag : Returns TRUE if flag <flagchar> is set
SetFlag : Turns flag <flagchar> on
ClearFlag : Turns flag <flagchar> off
<flagchar> must be a value from 'A' to 'Z' (upper or lower case).
------------------------------------------------------------------
void exit(void);
------------------------------------------------------------------
Exits the current pex-program, and unloads it from memory.
------------------------------------------------------------------
void ExitTSR(void);
------------------------------------------------------------------
Exits the current pex-program, and leaves it resident. This has
some important implications:
- All global and static variables keep their values for
subsequent executions.
- When the same pex-file is run again through menu function 60,
the resident copy will be executed. This will result in faster
loading.
If you set up any handlers, you MUST use ExitTSR() to exit the
program.
- 110 -
------------------------------------------------------------------
int InstallHandler(int handler,function);
------------------------------------------------------------------
This is probably the most advanced and complicated function in the
ProBoard SDK. With this function you can set up a "handler" for a
specific action. Right now only one type of handler is supported:
a replacement for the sysopkey-handler. This way you can create
your own sysopkeys, or change the behaviour of existing sysopkeys.
You could create a handler that intercepted the Alt-J key, and
write your own version. In the next version you will be able to
set up handlers for low-level I/O operations. So you could replace
all I/O routines by your own functions. This way you can support
your own exotic hardware or something like that. Anything goes!
handler : Handler type. For the moment, only HANDLER_SYSOPKEY
is supported.
function : A pointer to the handler function you created.
Return value : -1 if illegal handler number is specified
0 if ok
The handler function is a function that returns an integer. The
parameters depend on the type of handler you are creating.
For HANDLER_SYSOPKEY the handler function has to be declared like
this:
int sysopkeyhandler(KEY k)
{
...
}
- 111 -
If a handler function decides to do anything, it has to return
HANDLED. If the handler wants to leave it up to ProBoard, it must
return NOT_HANDLED.
This asks for an example I suppose:
int keyhandler(KEY k)
{
if(k == KEY_ALTJ)
{
printf("\7\rHang on %s! I'm shelling to DOS...",UserFirstName);
MenuFunction(MENU_SHELL,"*N*Q*X*!");
printf("I'm back!!\n");
return HANDLED;
}
else return NOT_HANDLED;
}
main(int argc,char *argv[])
{
InstallHandler(HANDLER_SYSOPKEY,keyhandler);
ExitTSR(); /* IMPORTANT */
}
So what does it do? It intercepts the sysopkey-function, and
checks if the key pressed is Alt-J. If it is, it shells to DOS
with swapping ON, and it writes its own messages to the screen.
When the sysop returns, the handler returns HANDLED to let
ProBoard know that it does not have to process the key. You could
use this example in an INIT.PEX file.
Is this powerful or what?
- 112 -
Global ProBoard variables
──────────────────────────────────────────────────────────────────
You have access to some important ProBoard system variables
through global variables defined in PB_SDK.H.
------------------------------------------------------------------
USER_REC * CurUser;
------------------------------------------------------------------
Pointer to the current user record. You can change any of the
field values in the record, but this will not result in any
immediate action by ProBoard. For example, if you change the
user's level, ProBoard will not know that you changed it, so you
will have to tell it by calling AdjustTime();
Check the file PB_SDK.H for a description of the USER_REC
structure.
------------------------------------------------------------------
int UserRecNr;
------------------------------------------------------------------
The record number of the current user's record in the file
USERS.PRO. This value cannot be changed.
------------------------------------------------------------------
int NumLimits;
------------------------------------------------------------------
The number of limits defined in ProCFG. You can access the
limit-values through the global array 'Limits'.
This value cannot be changed.
------------------------------------------------------------------
LIMIT * Limits;
------------------------------------------------------------------
Is an array of all user levels defined, with download and time
limits. Check the file PB_SDK.H for information on the LIMIT
structure.
You are not allowed to change any values! (A good compiler should
generate an error or warning if you try to do so)
- 113 -
------------------------------------------------------------------
char * LoginDate;
char * LoginTime;
------------------------------------------------------------------
This is the login date & time of the current user.
LoginDate[0] : Day portion of login date
LoginDate[1] : Month portion of login date
LoginDate[2] : Year portion of login date (00-99)
LoginTime[0] : Hour portion of login time
LoginTime[1] : Minute portion of login time
LoginTime[2] : Second portion of login time
------------------------------------------------------------------
bool NetEntered;
bool EchoEntered;
------------------------------------------------------------------
These READ-ONLY variables tell you if netmail or echomail has been
entered during this session.
------------------------------------------------------------------
int NumUsers;
------------------------------------------------------------------
This READ-ONLY variable is the number of users currently available
in the file USERS.PRO.
------------------------------------------------------------------
int NodeNumber;
------------------------------------------------------------------
This READ-ONLY variable is the current node number.
------------------------------------------------------------------
char * CurMenu;
char * UserFirstname;
char * PrevUser;
char * StartupPath;
char * SysPath;
------------------------------------------------------------------
- 114 -
CurMenu : Current menu name
UserFirstName : First name of current user
PrevUser : Name of previous user
StartupPath : Name of the directory where ProBoard was started
from (with trailing '\')
SysPath : Name of the ProBoard system directory (with
trailing '\')
These are READ-ONLY strings!
------------------------------------------------------------------
CONFIG * Config;
------------------------------------------------------------------
A pointer to the current ProBoard configuration structure. See the
file PB_SDK.H for a description of the CONFIG structure.
- 115 -
Special-purpose PEX-files
──────────────────────────────────────────────────────────────────
Several pex-files will be loaded automatically (if present). They
perform certain actions like edit a message, set up handlers, etc.
INIT.PEX : Will be loaded and executed before any I/O
has been done. Use this to set up any
handlers (sysopkey handlers, ...)
INIT_1.PEX -
INIT_9.PEX : Is the same as INIT.PEX, but will be loaded
in the order of the numbers. So you can have
up to 10 initialization pex-files.
LOGIN.PEX : Is run just before the user is asked for
his/her name.
BIRTHDAY.PEX : Is run after showing NEWS.ANS/ASC if today
is the user's birthday.
NEWUSER1.PEX : Is run before the file NEWUSER1.ANS/ASC is
shown.
NEWUSER2.PEX : Is run before the file NEWUSER2.ANS/ASC is
shown.
WELCOME.PEX : Is run before the file WELCOME.ANS/ASC is
shown
WELCOMEx.PEX : Is run before the file WELCOMEx.ANS/ASC is
shown (x = 1 to 9)
SECxx.PEX : Executed when a user with security level xx
logs in. Is run before SECxx.ANS/ASC is
shown.
EXPIRED.PEX : Is run before EXPIRED.ANS/ASC is shown, and
after a user's level is lowered because the
subscription date was reached.
GOODBYE.PEX : Is run before GOODBYE.ANS is displayed.
GOODBYE2.PEX : Is run after GOODBYE.ANS is displayed.
- 116 -
MSGED.PEX : Is a replacement of the built-in message
editor. It will be executed with no
parameters. The message that you create has
to be written to a file called MSGTMP.
ProBoard will then read this file and create
a message from it. To let ProBoard know that
the user has aborted a message, delete
MSGTMP.
FSED.PEX : Is similar to MSGED.PEX, but will be
executed if the user has selected the
fullsrceen editor. It works the same way as
MSGED.PEX, but ProBoard will create a MSGTMP
file with the original message if a user is
replying to a message.
- 117 -
┌───────────────────────────────────────────┐
│ XII. REMOTE ACCESS TO PROBOARD CONVERSION │
└───────────────────────────────────────────┘
If you are operating a Remote Access system, you can convert the
userfile, message areas, file areas and all the menus to
ProBoard. This is done by running CONVERT.EXE in the ProBoard
system directory.
Here's the procedure to use:
- Install ProBoard as explained earlier.
- Move to the ProBoard system directory (usually \PB)
- Run CONVERT RA <ra-dir>
eg. CONVERT RA C:\RA
- When everything is converted, move all *.MNU files that are now
in the ProBoard system directory to the ProBoard menu directory.
Things you will have to do manually:
- Enter all system parameters in ProCFG (like paths).
- Enter the userlevels & downloadlimits in ProCFG
- Check all file- and message-related functions for the
correct data fields. ProBoard uses a different (more
advanced) method for specifying areas.
- Copy the messagebase files from the RA directory to the
ProBoard messagebase directory. (No conversion necessary)
- Enter the events in ProCFG.
- Copy any .Q-A files to the ProBoard directory.
LASTREAD.BBS conversion
──────────────────────────────────────────────────────────────────
See PBUTIL LR.
RA compatibility files
──────────────────────────────────────────────────────────────────
ProBoard uses different files to keep the file areas and message
areas in. Therefore it is not possible to run RA-utilities that
use the files 'FILES.RA', 'MESSAGES.RA', 'TIMELOG.BBS' and
'SYSINFO.BBS'.
- 118 -
To solve this problem, you can use the CONVERT utility to create
these files from the ProBoard system files. You have to run
'CONVERT SIMUL' in the ProBoard system directory. It will create
the following files:
CONFIG.RA
FILES.RA
MESSAGES.RA
TIMELOG.BBS
SYSINFO.BBS
You should run this utility before you use your favorite
RA-utility.
- 119 -
- 120 -